这道题考察的是对数字/十进制的处理。
首先说个结论:最终数字个数的最小值为十进制里最大的那个数字。
证明起来很简单。假设最大的那个数字为 ,首先显然 个quasibinary(01串)一定能组成最终的 ,然后如果低于 个01串则显然不能组成 ,因为低于 个组成的最大的数字一定是小于 的。
那么只要构造一种方案组合起来就可以了。这里我采用的是按位比较的方式,先用数组存每一位,然后哪位用完了就输出0,否则输出1即可。
注意要判断一下前导0,不要把前导0输出了。
ac代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,a[111];
    cin>>n;
    int p=0;
    int ma=0,i,j=0;
    while(n){
        a[j]=n%10,n/=10;
        ma=max(ma,a[j]);
        j++;
    }
    cout<<ma<<endl;
    while(ma--){
        for(i=j-1;i>=0;i--)if(a[i])break;
        for(;i>=0;i--){
            if(a[i])cout<<1,a[i]--;
            else cout<<0;
        }
        cout<<" ";
    }
}