检查输入是否为2的幂是无关紧要的.您应该编写一个递归方法,在每次调用中删除一位.
数字具有偶数二进制长度,如果只有它具有奇数长度,如果从中删除一位.
static boolean hasEvenLength(int n)
{
if (n<2) { // single digit
return false;
}
return !hasEvenLength(n/2);
}
这可以处理非负输入.对于负数,我可以说你应该总是返回true,因为最高位(符号位)总是被设置,所以你可以说这个数字有32个二进制数字.
这是0到99之间所有数字的方法输出:
0 0 false
1 1 false
2 10 true
3 11 true
4 100 false
5 101 false
6 110 false
7 111 false
8 1000 true
9 1001 true
10 1010 true
11 1011 true
12 1100 true
13 1101 true
14 1110 true
15 1111 true
16 10000 false
17 10001 false
18 10010 false
19 10011 false
20 10100 false
21 10101 false
22 10110 false
23 10111 false
24 11000 false
25 11001 false
2