CodeForces 538B想法题

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; }

 

 

 

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值