一,題目要求
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;
}