这道题考察的是对数字/十进制的处理。
首先说个结论:最终数字个数的最小值为十进制里最大的那个数字。
证明起来很简单。假设最大的那个数字为 ,首先显然 个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<<" "; } }