天天看点

二进制间距

题目

输入一个十进制整数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;
}