题目:4861. 构造数列
题目描述
我们规定如果一个正整数满足除最高位外其它所有数位均为 0,则称该正整数为圆数。
例如,1,8,900,70,5000 都是圆数,120,404,333,8008 都不是圆数。
给定一个正整数 n,请你构造一个圆数数列,要求:
数列中所有元素相加之和恰好为 n。
数列长度尽可能短。
输入
第一行包含整数 T,表示共有 T 组测试数据。
每组数据占一行,包含一个整数 n。
输出
每组数据输出两行结果,第一行输出数列长度,第二行输出构造数列。
如果方案不唯一,输出任意合理方案均可。
数据范围
前三个测试点满足 1≤T≤10。
所有测试点满足 1≤T≤10000,1≤n≤10000。
时空范围
1s / 64MB
输入样例
5
5009
7
9876
10000
10
输出样例
2
5000 9
1
7
4
800 70 6 9000
1
10000
1
10
代码
cpp
#include<bits/stdc++.h>
using namespace std;
int n,w;
string s;
vector<int> res;
int main(){
cin>>n;
while(n--){
cin>>s;
res.clear();
w=pow(10,s.size()-1);
for(int i=0;i<s.size();i++){
if(s[i]>'0'){
res.push_back((s[i]-'0')*w);
}
w/=10;
}
cout<<res.size()<<endl;
for(int i=0;i<res.size();i++) cout<<res[i]<<" ";
puts("");
}
return 0;
}
结果
