题目描述
给出一个数 n,你需要将 n 写成若干个数的和,其中每个数的十进制表示中仅包含 0 和 1。
问最少需要多少个数。
输入输出格式
输入格式:
一行 一个数 n(1 ≤ n ≤ 106)
输出格式:
最少的数的个数,并给出一种方案。
输入输出样例
输入样例 1
9
输出样例 1
9
1 1 1 1 1 1 1 1 1
输入样例 2
32
输出样例 2
3
10 11 11
分析
可以先找出每位上的数,最大的数就是最少的数的个数。因为我是从个位开始找的,所以可以从后往前进行枚举,若这一位上的数大于 0,则输出 1,然后还要记录一下第一个 1 出现在哪一位,如果之后的数小于这个标记的位置,并且这个数等于 0,则输出 0。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,f[10];
int cnt=1;
cin>>n;
int mx=0;
while(n>0){
mx=max(mx,n%10);
f[cnt++]=n%10;
n/=10;
}
cout<<mx<<endl;
while(mx--){
for(int i=cnt-1;i>=1;i--){
if(f[i]){
cout<<1;
f[i]--;
}
else{
if(i<cnt){
cout<<0;
}
}
}
cout<<" ";
while(f[cnt-1]==0){
cnt--;
}
}
return 0;
}