我对这个问题有疑问,任何帮助都会很棒!
编写一个程序,将一个整数 N 作为参数,并打印出其截断的二进制对数 [log2 N]。提示:[log2 N] = l 是最大整数 ` 使得 2^l <= N。
我得到了这么多:
int N = Integer.parseInt(args[0]);
double l = Math.log(N) / Math.log(2);
double a = Math.pow(2, l);
但我不知道如何在保持 2^l <= N 的同时截断 l
谢谢
这就是我现在拥有的:
int N = Integer.parseInt(args[0]);
int i = 0; // loop control counter
int v = 1; // current power of two
while (Math.pow(2 , i) <= N) {
i = i + 1;
v = 2 * v;
}
System.out.println(Integer.highestOneBit(N));
这会打印出小于 N 的等于 2^i 的整数。我的测试仍然是错误的,我认为这是因为问题是要求打印最大的 i 而不是 N。所以当我做
整数.highestOneBit(i)
正确的 i 不会打印出来。例如,如果我这样做:N = 38,那么最高的 i 应该是 5,但它会打印出 4。
然后我尝试了这个:
int N = Integer.parseInt(args[0]);
int i; // loop control counter
for (i= 0; Math.pow(2 , i) == N; i++) {
}
System.out.println(Integer.highestOneBit(i));
如果我让 N = 2,我应该打印出 1,但它打印出 0。
除此之外,我已经尝试了很多东西,但无法理解我做错了什么。帮助将不胜感激。谢谢