我是Java的新手,当我尝试使用Math.pow方法查找数字的幂时,我意识到答案是不正确的。我想了解为什么?
public class Main() {
int x = 1919;
int y = x*x*x*x;
public static void main(String[] args) {
System.out.println(y);
}
}
输出:2043765249
但通常的答案是:13561255518721
答案 0 :(得分:3)
您正在使用整数作为答案,得到了数值溢出。
对y
使用double或long或BigInteger,您将获得正确的答案。
public class Main {
public static void main(String[] args) {
System.out.println(Math.pow(1919, 4));
System.out.println((double) 1919*1919*1919*1919);
}
}
输出相同的值。
答案 1 :(得分:3)
如果逐步进行操作,您会发现该值立即变为负值,这是因为您达到了Integer.MAX_VALUE
的{{1}}
2^31 -1
您可以使用更大的类型,例如int x = 1919;
int y = 1;
for (int i = 0; i < 4; i++) {
y *= x;
System.out.println(i + "> " + y);
}
0> 1919
1> 3682561
2> -1523100033
3> 2043765249
或double
BigInteger
答案 2 :(得分:0)
使用long
代替int
public class Main{
public static void main(String[] args) {
long x = 1919;
long y = x*x*x*x;
System.out.println(y);
}
}