import java.util.*;
import java.lang.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
int tmp, maxlen = 1, upper = (int) (Math.log(n)/Math.log(2))+1;
for(int i=0;i<=upper;i++){
for(int j=upper;j>=i;j--){
tmp = (int) Math.pow(2,j+1) - (int) Math.pow(2,i);
if((tmp&n)==tmp && j-i+1>maxlen) {
maxlen = j-i+1;
break;
}
}
}
System.out.println(maxlen);
}
}
}
位运算,O(log(n)),也没啥好说的,就是2个for循环,每次从i到j去做与运算,看看是不是能匹配上,越往后遍历长度越短,只要匹配上了可以提前结束,一定是最长的

京公网安备 11010502036488号