【发布时间】:2013-10-12 21:52:42
【问题描述】:
我有一个关于这个问题的问题,任何帮助都会很棒!
编写一个程序,将一个整数 N 作为 参数并打印出其截断的二进制对数 [log2 N]。提示:[log2 N] = l 是最大整数 ` 使得 2^l
我明白了很多:
int N = Integer.parseInt(args[0]);
double l = Math.log(N) / Math.log(2);
double a = Math.pow(2, l);
但我不知道如何在保留 2^l 的同时截断 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。
除此之外,我已经尝试了很多东西,但无法理解我做错了什么。帮助将不胜感激。谢谢
【问题讨论】:
-
欢迎来到 Stack Overflow! Stack Overflow 不是让其他人为你做功课,但我们可以帮助指导你。到目前为止,您尝试过什么?
-
你好,当然!我只是不明白 2^l 如何
-
我也在尝试两种方法的力量并试图从它向后工作
标签: java eclipse logging binary logarithm