C++中統計二進位制表示中所有1連續在一起的數字
給定一個正整數N。目標是統計小於或等於N且其二進位制表示中所有位都為1的數字。例如,1是1,3是11,7是111,15是1111……以此類推。
如果我們觀察這些數字,它們都是2i-1。其中i從1開始。要檢查小於n的此類數字,我們將比較2i-1<=n。然後遞增計數。
讓我們透過例子來理解。
輸入 − N=15
輸出 − 二進位制表示中所有位都為1的數字:4
說明 − 數字為相同素數的和 − 這些數字將是1、3、7、15
輸入 − N=50
輸出 − 二進位制表示中所有位都為1的數字:5
說明 − 數字為相同素數的和 −
下面程式中使用的演算法如下
我們取一個正整數N。
函式allOnes(int n)以n作為輸入,並返回二進位制表示中所有位都為1的數字。
將初始變數count設定為0,用於表示此類數字。
使用for迴圈遍歷從i=1到i<=n。
對於每個i,如果pow(2,i)-1小於或等於n,則遞增count。
在for迴圈結束時返回count作為結果。
示例
#include <bits/stdc++.h>
using namespace std;
int allOnes(int n){
int count = 0;
for(int i=1;i<=n;i++){
if(n>=pow(2,i)-1){
count++;
//cout<<" "<<pow(2,i)-1;
}
}
return count;
}
int main(){
int N=23;
cout <<endl<< "Number having all 1's in binary : "<<allOnes(N);
return 0;
}輸出
如果我們執行以上程式碼,它將生成以下輸出:
Number having all 1's in binary : 4
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP