gpt4 book ai didi

java - 本应为正数的负数输出

转载 作者:搜寻专家 更新时间:2023-11-01 01:22:33 28 4
gpt4 key购买 nike

我正在做一个 java 项目,我有一个循环让我发疯。

程序接受一个输入 N,它是一个正整数。我想要我的循环做的是:

假设 N = 10。循环将获取 1 到 10 的所有数字,将其提高到五次方,并将每个值存储在长度为 N 的数组中。

我认为,直到 N = 73 之前,它(看起来)都可以正常工作。一旦 N 达到 74 或更高,它就会随机给我 74^5 的负数。这显然是不正确的。数字越高,给我的负面影响就越多。

private static int _theLimit = EquationSolver.getLimit(); //input "N"
private static int length = (int) (_theLimit); //length of possible solutions array = N
static int[] _solutions = new int[length];

public static void solutionRun() {
for(int i = 1; i <=_theLimit ;) {
//theLimit refers to the input N; for numbers from 1 until N
for (int p = 0; p <= _solutions.length-1; p++) {
//solutions is an array that stores all possible solutions to ^5 from 1 to N;
_solutions[p] = i*i*i*i*i;
//p refers to the array location, increments with each new i
i++;
}
}
for(int q = 0; q<=_solutions.length-1; q++){ //outputs solutions for debugging purposes
System.out.println(_solutions[q]);
}
}

最佳答案

问题是你刚刚超过了整数允许的范围。

Int 允许从 -2,147,483,648 到最大值 2,147,483,647(含)(source)的数字,因为 74 ^5 = 2,219,006,624。因此,Int 可以处理的更多。

如果你想要更大的范围,你可以使用 java BigInteger类(class)。代码示例:

BigInteger pow(BigInteger base, BigInteger exponent) {
BigInteger result = BigInteger.ONE;
while (exponent.signum() > 0) {
if (exponent.testBit(0)) result = result.multiply(base);
base = base.multiply(base);
exponent = exponent.shiftRight(1);
}
return result;
}

注意事项:这可能不是很有效,并且可能不适用于负底数或指数。将其用作有关如何使用 BigIntegers 的示例。

除了 BigInteger,您还可以使用 long 类型,从 -9,223,372,036,854,775,8089,223,372,036,854,775,807(含)(source) .

不要为此目的使用double,因为您可以获得精度problems .

关于java - 本应为正数的负数输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372644/

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