AcWing 4201. 01数
原题链接
中等
作者:
sy2020lyk
,
2021-12-25 20:33:57
,
所有人可见
,
阅读 258
题目
如果一个正整数,其各个数位上的数字均满足要么是 0,要么是 1,则称该数字为 01 数。
例如,1 和 10 都是 01 数。
给定一个整数 n。
请你计算,1∼n 中有多少个 01 数。
输入格式
一行,一个整数 n。
输出格式
一个整数,表示 01 数的数量。
比第一题还水(位运算)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,s;
int main()
{
cin>>n;
for (int i=1;;i++){
int j=i;
int a[32],k=0,t=0;
memset(a, 0, sizeof a);
while(j>0){
a[++k]=j%2;
j/=2;
}
for(int ii=k;ii>=1;ii--){
t=t*10+a[ii];
}
if(t>n)break;
s++;
}
cout<<s;
}