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;
}
posted @ 2022-09-17 23:56  岛田小雅  阅读(19)  评论(0编辑  收藏  举报