Codeforces Round #640 (Div. 4) A. Sum of Round Numbers
Codeforces Round #640 (Div. 4)
翻译 岛田小雅
A. Sum of Round Numbers
出题人 MikeMirzayanov
我们定义一个 round 的正整型,它长成这样:d00...0。换句话说,如果一个正整型是 round 的,那它除了最高位以外所有的数位都是 \(0\)。我们特别规定从 \(1\) 到 \(9\) (包含 \(9\))都满足 round。
举个例子,这些数是 round 的:\(4000\), \(1\), \(9\), \(800\), \(90\),而这些不 round: \(110\), \(707\), \(222\), \(1001\)。
给你一个正整数 \(n\) \((1≤n≤10^4)\),把它用最少数量的 round 数之和表示出来。
输入格式
第一行是一个整型 \(t\) \((1≤t≤10^4)\),代表测试点个数。接下来有 \(t\) 个测试点。
每个测试点包含一个整型 \(n\) \((1≤n≤10^4)\).
输出格式
对每个测试点输出一个答案,每个答案必须以一个整型 \(k\) 开头,它代表加数的数量。然后输出一行 \(k\) 个加数,用空格分开。你可以以任意顺序输出你的加数。如果有很多种答案,任意输出一个。
样例
输入
5
5009
7
9876
10000
10
输出
2
5000 9
1
7
4
800 70 6 9000
1
10000
1
10
题解
作者 岛田小雅
从样例不难看出,可以把 \(n\) 的每一位拆成 round 数然后直接加起来。
AC 代码
作者 岛田小雅
#include <bits/stdc++.h>
using namespace std;
int t, n;
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> t;
while(t--)
{
cin >> n;
int suf = 1;
vector<int> ans;
while(n)
{
int tmp = n%10*suf;
if(tmp) ans.push_back(tmp);
suf *= 10;
n /= 10;
}
cout << ans.size() << '\n';
for(int i = 0; i < ans.size(); i++) cout << ans[i] << " \n"[i==ans.size()-1];
}
return 0;
}