一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成。例如0,1,101,110011都是权势二进制而2,12,900不是。
当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n。
Input
单组测试数据。 第一行给出一个整数n (1<=n<=1,000,000)
Output
输出答案占一行。
Input示例
9
Output示例
9
这次完全是自己想起来的,0ms,真爽,对于1,10,100,1000,10000……
这样的十进制数,都可以用二进制数表示出来,举例说明n为4位数(下面我说的都是
十进制数)
每一个1000可以吸收1个100,1个10,1个1
每一个100可以吸收1个10,1个1
每一个10可以吸收1个1
<span style="font-size:18px;">#include<cstdio>
int count[20];
int main()
{
int n,len=1;
scanf("%d",&n);
while(n)
{
count[len++]=n%10;
n/=10;
}
int j,sum=0;
for(len-=1;len>=1;--len)
{
sum+=count[len];
for(j=1;j<len;++j)
{
count[j]-=count[len];
if(count[j]<0)
count[j]=0;
}
}
printf("%d\n",sum);
return 0;
} </span>