统计1到n中十进制仅含0和1的数字个数的高效解法咨询
1~n范围内仅含0和1的十进制数字计数高性能实现方案
方案思路
所有仅由0和1组成的十进制数,等价于把正整数的二进制表示直接当做十进制数值读取的结果,这类数字最多有10位(因为n≤10^9),总共有不超过1023个,直接遍历所有可能的这类数字判断是否≤n即可,性能远高于暴力遍历1到n的实现。
实现代码
#include <iostream> using namespace std; int main() { int n, count = 0; cin >> n; // 最多遍历1023次,完全满足性能要求 for (int i = 1; i < 1024; i++) { long long num = 0; int temp = i; while (temp) { num = num * 10 + (temp & 1); temp >>= 1; } if (num <= n) { count++; } else { // 生成的数字按从小到大排列,超过n直接终止循环 break; } } cout << count << endl; return 0; }
验证结果
- 输入
101:输出5,符合示例要求 - 输入
13:输出3,符合示例要求
内容的提问来源于stack exchange,提问作者Ali Nazari
相关产品推荐
相关产品推荐

