gpt4 book ai didi

java - long 数据类型中 k 的正幂

转载 作者:行者123 更新时间:2023-11-30 06:12:53 25 4
gpt4 key购买 nike

我必须在 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 转换为 longdouble 可以容纳比 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com