a414 - 位元運算之進位篇
題目描述
題目要求計算一個十進制正整數 N 加 1 後,在二進制表示下需要進行多少次進位。
解題思路
題目要求計算 N+1 的二進制表示中進位的次數。我們可以通過迭代的方式來模擬二進制加法,每次檢查 N 的最低位是否為 1。如果最低位是 1,則進位次數加 1,然後將 N 右移一位。如果最低位是 0,則直接右移一位,不進行進位。這個過程一直持續到 N 變為 0。
複雜度分析
- 時間複雜度: O(log N) (因為 N 每次右移一位,最多需要 log N 次迭代)
- 空間複雜度: O(1) (只使用了常數個變數)
程式碼
#include <iostream>
using namespace std;
int main(){
long long int a=0,ans=0;
while(scanf("%lld",&a) && a){
if(a>0){
while(a%2==1){
ans++;
a/=2;
}
printf("%d\n",ans);
ans=0;
}
}
}