我必须在 java long 数据类型中打印整数 k 的所有正幂。 我的代码是:
int k = Integer.parseInt(args[0]);
int i = 1;
long a = k;
while (a <= Long.MAX_VALUE) {
System.out.print(i + " ");
System.out.println(a);
i++;
a = (long) Math.pow(k, i);
}
当我运行这个程序时,会创建一个无限循环。
但是,当我运行这个程序并进行一些小的更改时:(我刚刚删除了 while 条件中的等于运算符)
int k = Integer.parseInt(args[0]);
int i = 1;
long a = k;
while (a < Long.MAX_VALUE) {
System.out.print(i + " ");
System.out.println(a);
i++;
a = (long) Math.pow(k, i);
}
据我所知,经过这个小小的改变后,它工作得很好。 但是,我无法理解这里发生了什么。
最佳答案
问题是在 Math.pow()
调用之后从 double
转换为 long
。 double
可以容纳比 long
更大的数字,并且如果您尝试将大的 double
转换为 long
,您将得到 Long.MAX_VALUE
。您的第一个循环永远不会退出,因为某个点之后的所有指数都将返回 Long.MAX_VALUE
。
亲自看看:
public class DoubleToLong {
public static void main(String[] args) {
System.out.println((long)Double.MAX_VALUE);
System.out.println(Long.MAX_VALUE);
}
}
返回:
9223372036854775807
9223372036854775807
关于java - long 数据类型中 k 的正幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32465465/