分析
直接贪心,没有什么思维难度。主要是考虑到贪心的选取更少的元素。那么元素个数为 其中 。那么考虑 如果分解完后 仍然这一位有 ,那么 。
代码
#include<bits/stdc++.h> using namespace std; int a[100],n,L,Ans; int ksm(int a,int b){ int x=1;for(;b;b>>=1,a=a*a)if(b&1)x=x*a;return x; } int main() { cin>>n; while(n){a[++L]=n%10;n/=10;} for(int i=1;i<=L;i++)Ans=max(a[i],Ans);printf("%d\n",Ans); for(int i=1;i<=Ans;i++){ int x=0; for(int i=1;i<=L;i++){ if(a[i])x+=ksm(10,i-1),a[i]--; } printf("%d ",x); } }