您的位置:首页 > 其它

华东交通大学2016届新生选拔赛:1002 二进制

2016-12-11 16:19 375 查看


二进制


Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)


Total Submission(s) : 29   Accepted Submission(s) : 12


Font: Times New Roman | Verdana | Georgia


Font Size: ← →


Problem Description

Jhc是一个爱学习的好孩子。有一天,他想找一些数字出来,这些数字是从1到N的连续自然数。jhc只需要其中样子长得和二进制一样的数字,

jhc很聪明,很快就找出了这些数字。但是,他并不满足,他想知道从1到N中有多少个这样的数字,但是他又懒得去查,你们可以帮助他解决这个问题吗?


Input

多组输入,每组一个N(1<=N<=1*10^9)


Output

每组样例输出一行,表示1~N中这样的数字的个数。


Sample Input

10



Sample Output

2

Hint
从1到10,这样的数字有1和10,故输出2


代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<cstdio>
#include<set>
#include<cmath>
#include<string>
using namespace std;

int main(){
char st[66];
while(~scanf("%s", st)){
long long sum = 0;
for(int i = 0; i < strlen(st); i++){
sum *= 2;
if(st[i] - '0' != 0)
sum++;
if(st[i] - '0' > 1 && i != strlen(st) - 1)
st[i + 1]++;
}
printf("%lld\n", sum);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: