程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 面試題10:二進制中1的個數

面試題10:二進制中1的個數

編輯:C++入門知識

\


方法一:判斷整數二進制表示中最右邊一位是否為1,接著把整數右移一位判斷倒數第二位是否為1,以此類推,直到整數變成0為止。

代碼:

 

#include "stdafx.h"   
#include <iostream>   
using namespace std;  
  
 int CountOf1(int n)  
 {  
    int nCount = 0;  
   
    while (n)  
    {  
        if (n & 1)  
        {  
            nCount++;  
        }  
   
        n = n >> 1;  
    }  
   
    return nCount;  
 }  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    cout << CountOf1(7) << endl;  
    system("pause");  
    return 0;  
}  
#include "stdafx.h"
#include <iostream>
using namespace std;

 int CountOf1(int n)
 {
 	int nCount = 0;
 
 	while (n)
 	{
 		if (n & 1)
 		{
 			nCount++;
 		}
 
 		n = n >> 1;
 	}
 
 	return nCount;
 }

int _tmain(int argc, _TCHAR* argv[])
{
	cout << CountOf1(7) << endl;
    system("pause");
	return 0;
}

缺點:如果輸入的數為負數,若一直做右移運算,最終將陷入死循環。

 

 

方法二:為避免陷入死循環,可以不右移輸入的數字,先將輸入數字和1做與運算,判斷最低位是否為1,接著將1左移一位,判斷倒數第二位是否為1,以此類推。

代碼:

 

#include "stdafx.h"   
#include <iostream>   
using namespace std;  
  
 int CountOf1(int n)  
 {  
    int nCount = 0;  
    unsigned int flag = 1;  
    while (flag)  
    {  
        if (n & flag)  
        {  
            nCount++;  
        }  
   
        flag = flag << 1;  
    }  
   
    return nCount;  
 }  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    cout << CountOf1(7) << endl;  
    system("pause");  
    return 0;  
}  
#include "stdafx.h"
#include <iostream>
using namespace std;

 int CountOf1(int n)
 {
 	int nCount = 0;
 	unsigned int flag = 1;
 	while (flag)
 	{
 		if (n & flag)
 		{
 			nCount++;
 		}
 
 		flag = flag << 1;
 	}
 
 	return nCount;
 }

int _tmain(int argc, _TCHAR* argv[])
{
	cout << CountOf1(7) << endl;
    system("pause");
	return 0;
}

缺點:循環次數等於整數二進制的位數,32為的整數需要循環32次。

 


方法三:把整數減去1,在和原整數做與運算,會把整數最右邊的一個1變成0,那麼一個整數的二進制表示中有多少個1,就可進行多少次這樣的操作。顯然可以減少循環次數。


代碼:

 

#include "stdafx.h"   
#include <iostream>   
using namespace std;  
  
int CountOf1(int n)  
{  
    int nCount = 0;  
  
    while (n)  
    {  
        nCount++;  
        n = n & (n -1);  
    }  
  
    return nCount;  
}  
  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    cout << CountOf1(7) << endl;  
    system("pause");  
    return 0;  
}  
#include "stdafx.h"
#include <iostream>
using namespace std;

int CountOf1(int n)
{
	int nCount = 0;

    while (n)
    {
		nCount++;
		n = n & (n -1);
    }

	return nCount;
}


int _tmain(int argc, _TCHAR* argv[])
{
	cout << CountOf1(7) << endl;
    system("pause");
	return 0;
}



 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved