天天看點

二進制間距

題目

輸入一個十進制整數n,判斷它二進制時 相鄰的兩個1 間距最大為多少?

如22,10110,1的間距分别為 2 1,故最大的為2.

#include<stdio.h>
#include<math.h>

int max(int a,int b){
    if(a>b) return a;
    else return b;
}

int n,num[32] = {1},ans,last;

int main(){
    scanf("%d",&n);
    
    //二進制轉換
    for(int i=1;i<=30;i++){
        num[i] = num[i-1]*2;
    }

    for(int i = 0;i<=30;i++){
        if((n&num[i]) !=0){
            last = i;
            break;
        }
    }
    for(int i =last +1;i<=30;i++){
        if((n&num[i])!=0){
            ans = max(ans,i-last);
            last = i;
            
        }
    }

    printf("%d",ans);
    return 0;
}