您的位置:首页 > 其它

joj2243

2011-09-23 20:51 211 查看




2243:
Endless Carry

ResultTIME LimitMEMORY LimitRun TimesAC TimesJUDGE

3s8192K827306Standard
作为2进制的加法,从k加1变成k+1可能会出现若干进位。如1011加1就会有2个进位。 给定n,从0开始不停地加1直到n,计算在此过程中总共会有多少次进位。


Input

输入的每一行有单独的一个值n。n=0标志输入结束


Output

对于输入的每一行,使用单独一行输出对应结果。


Sample Input

2
5
10
0


Sample Output

1
3
8


Problem Source: skywind

This problem is used for contest: 33

这个题目主要是想到将数字转化为二进制码的形式,然后对每个1计算进位次数。。。。

#include<stdio.h>

int mul(int n)

{

int sum=0;

for(int i=0;i<n;i++)

{

sum+=(1<<i);

}

return sum;

}

int main()

{

int n;

while(scanf("%d",&n),n)

{

int count=0;

int sum=0;

while(n>0)

{

n=n>>1;

count++;

if(n%2==1)

{

sum+=mul(count);

}

}

printf("%d\n",sum);

}

return 0;

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