您的位置:首页 > 其它

CodeForces 538B想法题

2017-08-21 19:36 204 查看
A number is called quasibinary if its decimal representation contains only digits 0 or 1. For example, numbers 0, 1, 101, 110011 — are quasibinary and numbers 2, 12, 900 are not.

You are given a positive integer n. Represent it as a sum of minimum number of quasibinary numbers.

Input

The first line contains a single integer n (1 ≤ n ≤ 106).

Output

In the first line print a single integer k — the minimum number of numbers in the representation of number n as a sum of quasibinary numbers.

In the second line print k numbers — the elements of the sum. All these numbers should be quasibinary according to the definition above, their sum should equal n. Do not have to print the leading zeroes in the numbers. The order of numbers doesn't matter. If
there are multiple possible representations, you are allowed to print any of them.

Example

Input

9

Output

9

1 1 1 1 1 1 1 1 1

Input

32

Output

3

10 11 11  

【题意】

给你一个数n,问最少能用多少个由0和1组成的数相加得到n。

要求输出最少需要几个数,以及这几个数分别是什么。

一眼看出解法然而不知道怎么下手写代码,删删改改写了很久也是很糟心了。。

【解法】

找出n这个数各位中最大的数就是个数,怎么输出各个数就直接上代码吧,虽然觉得自己写的有点蠢蠢的。

#include<cstdio>
#include<cstring>
char s[10];
char s2[10];
int b[15];
int main(){
scanf("%s",s);
int l=strlen(s);

int f=0;
while(1){
int max=0;
for(int i=0;i<l;i++){//找到最大的
if(s[i]-'0'>max)	max=s[i]-'0';
}
if(!f)	printf("%d",max);
if(!max)	break;
if(!f)	printf("\n");
if(f)	printf(" ");
f=1;
int pos=0;
for(int i=0;i<l;i++){
if(s[i]-'0'==max){
b[pos++]=1;
}
else{
b[pos++]=0;
}
}
for(int i=0;i<l;i++){
if(s[i]-'0'==max)	s[i]--;
}
int flag=0;
for(int i=0;i<l;i++){
if(!b[i]){
if(flag)	printf("0");
}
else{
printf("1");
flag=1;
}

}
}
printf("\n");
return 0;
}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: