gpt4 book ai didi

java long 变量的行为类似于 int 变量

转载 作者:行者123 更新时间:2023-12-02 04:06:49 26 4
gpt4 key购买 nike

我认为“long”类型变量的行为类似于“int”类型变量。我觉得是这种情况,因为随着变量变得越来越大,当它试图超过 2147483647(“int”类型的最大值)时,它实际上会翻转为负值。显然,“long”类型的最大值要容易得多。

我想我应该将我的代码粘贴到这里。请不要对代码苛刻,它根本没有被重构。另外,您会看到许多蹩脚的尝试强制代码将我的相关变量视为“长”类型,但这些努力的总体并不成功。

注意,此代码处理“N 选择 X”或组合。输入是组合数和 N。代码循环遍历 X 的可能值,直到找到匹配项或直到超出匹配的可能性(或直到计算出的组合“变为负值”。)

预先感谢您的帮助。

public class primativeLongPractice {

private static long fctrl (long num) {
long ans = 1L;
for (long i=num; i>0; i--) ans = ans * i;
return ans;
}

private static long nchoosex (long n, long x) {
long y = n - x;
if (y>x) {
long temp = y;
y=x;
x=temp;
}
long ans = 1L;
for (long i=n; i>x; i--) ans = ans * i;
return ans/fctrl(y);
}

public static long checkchoose(long m, int n) {
long N = (long)n;
long combos = 0L;
long x = 1L; // starting out at 1 and going up
// compute "n choose x" call it combos
combos = nchoosex(N,x);
System.out.println(n + " choose " + x + " equals " + combos + "; m equals " + m);
if (combos==m) return x;
while ((combos>1)&&(combos<m)) {
x = x + 1;
combos = nchoosex(N,x);
System.out.println(n + " choose " + x + " equals " + combos + "; m equals " + m);
if (combos==m) return x;
}
System.out.println("Didn't find anything");
return -1L;
}

public static void main(String[] args) {
long p = 155117520L;
int q = 30;
long r = checkchoose(p,q);
System.out.println("For inputs " + q + " and " + p + " the function returned " + r);
}
}

最佳答案

我很快就调试好了。

对于 n = 30, x = 14,您的值 ans 有一个长溢出并导致 value

ans = -5769043765476591616

fctrl(y) = 87178291200

这使得结果看起来像是由于整数溢出而滚动的。

关于java long 变量的行为类似于 int 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34203573/

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