题目链接https://vjudge.net/problem/NBUT-1666
hkhv学长最近对二进制数很感兴趣,喜欢一切0和1组成的数。现在有一个十进制整数n,问你1到n之间有多少个数是只有0和1组成的类似二进制的数,输出他们的个数。
题解:如果某位大于‘1’,就将其后所有的位置为‘’1’‘,然后当作二进制求他多大,他多大说明就有几个比它小的只有‘0’,‘1’组成的整数
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
int main()
{
string s;
while(cin >> s){
for (int i = 0; i < s.size(); i++)
{
if (s[i] > '1')
{
for (int j = i; j < s.size(); j++)
{
s[j] = '1';
}
break;
}
}
// cout << s << endl;
int ans = 0;
reverse(s.begin(), s.end());
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '0') continue;
else ans += (int)pow((double)2, (double)i);
}
printf("%d\n", ans);
}
return 0;
}
来源:https://www.cnblogs.com/hulian425/p/12237023.html