這題提供幾個做法
作法一:
懶人作法(本人)
scanf輸入
輸出(__builtin_popcount(a)==1)?"Yes":"No"
__builtin_popcount(a) 為一個內建函式,可以計算一個數裡面的bit數量
1 = 1(1); 2 = 01(1); 3 = 11(2)
作法二:出自友好的討論區大老
建表
int = 2^31-1
table[i | i<=31] =
{i==0 => 1;
else table[i-1]<<1;
}
比較快的建表法
作法三:一般的位元運算法
輸入a
count 紀錄個數
while(a && count < 2)
count += a&2;
a>>1