【面試題】劍指offer10--求一個數的二進位制數中的1的個數
阿新 • • 發佈:2019-01-29
求一個數二進位制數中的個數
第一種方法:模除法
程式碼如下:
第二種方法:第一種方法的優化,解決傳入的數字是負數的問題//Q:請實現一個函式,輸入一個整數,輸出該數二進位制中的 //1的個數。例如:把9表示成二進位制是1001,有2位是1.因此,如果輸入是9 //改函式輸出2。 #include<iostream> using namespace std; int TheNumOf1(int num)//統計二進位制中1的個數 { int count = 0; while (num) { if (num % 2 == 1) { count++; } num = num / 2; } return count; } int main() { int num = 0; int ret = 0; cout << "請輸入一個數字:"; cin >> num; ret = TheNumOf1(num); cout << num << "的二進位制數中的1的個數為:" << ret << endl; system("pause"); return 0; }
第三種方法:對前兩種方法的優化,為了解決沒一個數字都是32位的位元位,使用下面的方法://Q:請實現一個函式,輸入一個整數,輸出該數二進位制中的 //1的個數。例如:把9表示成二進位制是1001,有2位是1.因此,如果輸入是9 //改函式輸出2。 #include<iostream> using namespace std; int TheNumOf1(unsigned int num) { int count = 0; while (num) { if (num % 2 == 1) { count++; } num = num / 2; } return count; } int main() { int num = 0; int ret = 0; cout << "請輸入一個數字:"; cin >> num; ret = TheNumOf1(num); cout << num << "的二進位制數中的1的個數為:" << ret << endl; system("pause"); return 0; }
第四種方法:使用按位與的方法,可以更快的執行程式//Q:請實現一個函式,輸入一個整數,輸出該數二進位制中的 //1的個數。例如:把9表示成二進位制是1001,有2位是1.因此,如果輸入是9 //改函式輸出2。 #include<iostream> using namespace std; int TheNumOf1(unsigned int num) { int count = 0; for (int i = 1; i < 32; i++) { if (num % 2 == 1) { count++; } num = num / 2; } return count; } int main() { int num = 0; int ret = 0; cout << "請輸入一個數字:"; cin >> num; ret = TheNumOf1(num); cout << num << "的二進位制數中的1的個數為:" << ret << endl; system("pause"); return 0; }
//Q:請實現一個函式,輸入一個整數,輸出該數二進位制中的
//1的個數。例如:把9表示成二進位制是1001,有2位是1.因此,如果輸入是9
//改函式輸出2。
#include<iostream>
using namespace std;
int TheNumOf1(unsigned int num)
{
int count = 0;
while (num)
{
num = num&(num - 1);
count++;
}
return count;
}
int main()
{
int num = 0;
int ret = 0;
cout << "請輸入一個數字:";
cin >> num;
ret = TheNumOf1(num);
cout << num << "的二進位制數中的1的個數為:" << ret << endl;
system("pause");
return 0;
}
使用這幾種方法都可以求解出一個數二進位制數中的1的個數