Test Message

a414: 位元運算之進位篇

內容

一個數在電腦裡遞增時需要進位幾次。


輸入

輸入的每一行有一個十進制正整數 N (1<=N<=2147483647)。
輸入的最後一行有一個 0,代表輸入的結束,這個數字請勿做任何處理。

1
4
7
17
0

輸出

對於每個正整數 N ,請輸出以二進制計算 N+1 時所需的進位次數。

1
0
3
1


解題思路

迴圈判斷最低位元,當最低位元為 1 時 count++、並將輸入右移 1 位元,當最低位元為 0 時代表到這位元就不會進位了,跳出迴圈輸出答案。


完整程式碼

AC (0.1s, 100KB)
#include<stdio.h>

int main()
{
int n, count;
while (scanf(" %d", &n) && n)
{
count = 0;
while (n & 1)
count++, n >>= 1;
printf("%d\n", count);
}
return 0;
}