【发布时间】:2021-12-14 14:16:48
【问题描述】:
我想找到 1 和 n 之间的数字的数量,这些数字是基数为 2(二进制)的有效数字。
1 ≤ n ≤ 10^9
例如,假设 n 等于 101。
Input: n = 101
在这种情况下,答案是 5
Output: 1, 10, 11, 100, 101 -> 5
另一个例子
Input: n = 13
Output: 1, 10, 11 -> 3
这是我的代码...
#include <iostream>
using namespace std;
int main()
{
int n, c = 0;
cin >> n;
for (int i = 1; i <= n; ++i)
{
int temp = i;
bool flag = true;
while(temp != 0) {
int rem = temp % 10;
if (rem > 1)
{
flag = false;
break;
}
temp /= 10;
}
if (flag)
{
c++;
}
}
cout << c;
return 0;
}
但我想要更快的速度。
(只有一个循环或可能没有任何循环)
提前致谢!
【问题讨论】:
-
惊喜,但二进制的 101 是十进制的 5,这不是巧合。