【题解-Acwing】4861. 构造数列

题目: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;
}

结果