gpt4 book ai didi

java - 有人能告诉我为什么我得到这个输出吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:31:00 24 4
gpt4 key购买 nike

好的,所以我有一个由以下代码定义的 Collat​​z 序列长度:

    private static int count = 0;

private static int collatz(int n){
count++;
if(n > 1){
if(n % 2 == 0){
return collatz(n/2);
}
return collatz(3*n+1);
}
return count-1;
}

现在,我检查了不同数字的输出(例如 print(collat​​z(3000)) => 48)以验证算法是否正常工作。我用了various sites要做到这一点,但一个号码拒绝工作。而这个数字正是ProjectEuler上第14题的解。这怎么可能,对于其他所有数字,我都会得到正确的结果(正确的链长度),而 837799 会产生不同的结果:58,而不是 524。

最佳答案

正如其他人在评论中指出的那样,这是一个溢出问题。您可以通过打印函数调用的参数来发现这一点。

int 更改为 long,或者更好,以绝对确保它不会溢出,使用 BigInteger:

private static int collatz(BigInteger n) {
count++;
if (n.compareTo(BigInteger.ONE) > 0) {
if (!n.testBit(0)) // even
return collatz(n.divide(BigInteger.valueOf(2)));

else
return collatz(n.multiply(BigInteger.valueOf(3)).add(BigInteger.ONE));
}
return count - 1;
}

public static void main(String[] args) {
System.out.println("res: " + collatz(BigInteger.valueOf(837799)));
}

关于java - 有人能告诉我为什么我得到这个输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134866/

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