输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少?
例子:输入数字9,则输出结果位9。因为[0-9]中,只有数字7有连续的三个‘1’出现,别的都没有,所以一共有9个数字满足要求。
分析:这个题目与求解一个正整数中‘1’的个数有点类似,就是进行一些循环处理。
代码如下:
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n,num_1=0,k=0; 6 cin>>n; 7 for(int i=1;i<=n;i++)//对[1-n]进行循环处理 8 { 9 int j=i; 10 while(j) 11 { 12 if(j&1) 13 num_1++;//该位置为1,则计数加1 14 else 15 num_1=0;//该位置出现0,则计数清零 16 j >>= 1; 17 if(num_1==3)//假如计数达到3,这break处理,减少运算量 18 { 19 k++; //满足连续三个1的条件数字总个数 20 break; 21 } 22 23 } 24 num_1=0; 25 } 26 cout<<n-k+1; 27 return 0; 28 }
原文地址:https://www.cnblogs.com/1216-ZhouJ/p/9644032.html
时间: 2024-11-03 22:48:52