時間限制: 1 sec
記憶體限制: 128 mb
提交: 20
解決: 14 [
提交][
狀態][
討論版]
hz遇到乙個數學問題,想請教聰明的你:給定乙個有符號整數型別的數,hz想知道該數
二進位制表示中1的個數。其中負數用補碼表示。
測試樣例輸入包含乙個有符號整數型別的整數n,注意可以是負數
該數二進位制表示中1的個數。其中負數用補碼表示。
1-5
1int占用4位元組,32位元(即32位),資料範圍為-2147483648~2147483647[-2^31~2^31-1]31
負整數的補碼求法:將其對應正數二進位制表示所有位取反(包括符號位,0變1,1變0)後加1
如 -5 其二進位制補碼1的個數為31
-5對應正數5(00000000000000000000000000000101)
→所有位取反(11111111111111111111111111111010)
→加1 (11111111111111111111111111111011)
】 **一:
#include
#include
#include
using namespace std;
int main()
}else
s=32-i;//減掉二進位制中正數為一時後面的數的個數
for(j=0;j**二:
注釋:在此種情況下,先進行0的個數的計算,再用32-sum比較簡單,當最後一位為0時,它取反後要考慮進製的問題。
最後一位:0——>1——>1+1——>0;
前一位:如果還是一還要考慮進製0——>1——>1+1——>0;
此時需要計算0的個數;(if(n%2==0&&flag==0) sum++;)
而當這一位值為1(if(n%2==1) flag=1;)時
進行計算一的個數:1——>0——>0,即為計算0的個數;(if(flag==1&&n%2==1) sum++;)
最後在32-sum即可。
#include
#include
#include
using namespace std;
int main()
printf("%d\n",sum);
}else
printf("%d\n",32-sum);}}
return 0;
}
關於進製的問題
關於進製的問題 eg 如果某系統15 4 112成立,則系統採用的是幾進製?a.6 b.7 c.8 d.9 解題思路 先看個位數字的乘積 5 4 20 根據選項試出20對哪個數取余為2,排除bc選項,展開等號兩邊 n 5 4 n 2 n 2 解得n 3 舍 n 6 因此答案選a eg 假設在n進製下...
C的進製問題
在這有這樣一道題 假設在n進製下,下面的等式成立,567 456 150216,n的值是?a.9 b.10 c.12 d.18 怎麼樣,是不是很難,那麼下面就用 乙個簡單的例題來學習該如何解決進製問題吧。如果在某系統中,等式15 4 112成立,則系統採用的是六 進製。那麼怎麼知道它採用的是六進製制...
轉進製的問題
進製轉換我們都知道方法,這裡就用 來實現一下,x進製轉換到y進製 其範圍為2到62進製之間轉換,a 到 z 表示10 35,a 到 z 表示36到62 這裡實際上是用到了大數相乘的思想,就是高精度乘低精度的基礎演算法,具體以 顯示 簡單說明兩個函式 inio 函式就是把各類進製轉為十進位制數,怎麼做...