1059 有多少個1?
阿新 • • 發佈:2018-11-11
有多少個1?
1、題目內容
Description
計算機中儲存的整數都是按補碼的型式,一個32位有符號整數的補碼的定義為:如果x>=0,則x的補碼等於x的二進位制表示;如果x<0,那麼x的補碼為2^32+x的二進位制表示。請根據給定的整數,求出它的補碼包含有多少位為1。
輸入
每行一個樣例,為一個整數(可以用int表示)。
輸出
每行輸出一個對應樣例的結果。
Sample Input
1
0
-1
Sample Output
1
0
32
2、題目分析
這個題目主要就是考察了二進位制的換算,當x為正數的時候,補碼直接就是它的二進位制,但是如果為負數的話,那麼要將x先加上一個2的32次方,然後再求它的二進位制,即為負數的補碼。但是需要注意的是,由於輸入的數可能會比較大,所以我們需要將資料型別定義為最大的超長整型才可以,不然就會因為溢位然後求錯。
3、參考程式碼
#include<stdio.h>
int main()
{
long long x;
while(scanf("%I64d",&x)!=EOF)
{
long long count=0;
if(x<0) //如果x小於0,則需要加上2的32次方
{
x=x+ 4294967296;
}
while(x!=0)
{
if(x%2==1)
{
count++;
}
x/=2;
}
printf("%I64d\n",count);
}
return 0;
}