《華爲機試在線訓練》之求int型正整數在內存中存儲時1的個數

一,題目要求

1,題目描述:輸入一個int型的正整數,計算出該int型數據在內存中存儲時1的個數

2,輸入描述:輸入一個整數(int類型)

3,輸出描述:這個數轉換成2進制後,輸出1的個數

4,輸入例子:5

5,輸出例子:2

二,思路分析

     假如輸入爲5時,只要讓5/2=2 ......餘1,

1,思路一:可以想到的是將輸入的整數直接轉換爲二進制數,然後將二進制數的每一位都賦值給數組,這樣再求數組的和,即可以實現內存爲1的計數。代碼如下:

#include <stdio.h>

int main() 
{
	int a,i=0,j=0,b[32],count=0;
	scanf("%d",&a);
	while(a>0)
	{
	    b[i] = a%2;
		a/=2;
		i++;	
	} 
	for(j=i-1;j>=0;j--)
	{
   
	   count = count + b[j];	
	} 
	printf("%d",count);
	return 0;
}

 2,思路二:可以使用位運算的方法,用移位得出每一位是否爲1,如果爲1,則計數變量加1,否則計數變量不變

      

#include <iostream>  
  
using namespace std;  
  
int numberof1(int in)  
{  
    int count = 0;  
    int input = in;  
    for(int i = 0; i < 32; i++)  
    {  
        if(1 == (input & 1))  
            count++;  
        input >>= 1;  
    }  
    return count;  
}  
  
int main()  
{  
    int numbertocount;  
    cin>>numbertocount;  
    cout<<numberof1(numbertocount)<<endl;  
    return 0;  
}  

     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章