这道题只让再可能的数中有0或1出现,那么最少可能方案的数量只可能是每个位上的最大的数字,因为一定要在这个位上减去这个数目的一,才可以将这位变成0,接下来就是按每一位的大小求出这一位该有几个数这一位是1

很重要的部分,求出每一个数的每一位是一还是零

for(int i=1;i<=n;i*=10){
		int res=(n/i)%10;	//求出最后一位的数值
	    ans=max(ans,res);
		for(int j=1;j<=res;j++){ //每一位是几,就应该有几个数这个位是1 
			num[j]+=i;		
		} 
	}
#include<bits/stdc++.h>
using namespace std;
int n;
int num[1005];
int main(){
	cin>>n;
    int	ans=0;
	for(int i=1;i<=n;i*=10){
		int res=(n/i)%10;	//求出最后一位的数值
	    ans=max(ans,res);
		for(int j=1;j<=res;j++){ //每一位是几,就应该有几个数这个位是1 
			num[j]+=i;		
		} 
	}
	cout<<ans<<endl;
	for(int i=ans;i>=1;i--){
		cout<<num[i]<<" ";
	} 
	return 0;
}