我们需要使用long和long.tounsignedstring()作为rice的类型,但是math.power将其更改为double:
package com.company;
public class Main {
public static void main(String[] args) {
int rk = 0;
for (byte feld = 1; feld < 65; feld++) {
System.out.println("Feld: " + feld + ", Reiskörner: " + Math.pow(2, rk));
rk = rk+1;
}
}
}
我测试了很多东西,但都没用。输出为:
Feld: 1, Reiskörner: 1.0
Feld: 2, Reiskörner: 2.0
Feld: 3, Reiskörner: 4.0
...
Feld: 63, Reiskörner: 4.6116860184273879E18
Feld: 64, Reiskörner: 9.223372036854776E18
代替:
Feld: 1, Reiskörner: 1
Feld: 2, Reiskörner: 2
...
2条答案
按热度按时间v2g6jxz61#
你可以很容易地回溯到
long
:但你应该注意到
Math.pow(2,63)
太大,无法放入长变量。最大值
long
值为263-1。你也可以避免
Math.pow()
如果使用shift运算符:注意我用了
Long.toUnsignedString
以便正确打印263。rdlzhqv92#
在循环中多次调用math.pow()是低效的,每次只需乘以2:
这也适用于长负数(打印为无符号),例如当结果太大而无法放入有符号的长负数时,因为乘法的效果与预期的一样,不同于从double转换。