You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现考拉兹序列算法部分正整数输入输出负数问题求助

问题原因

你遇到的是Java int类型整数溢出问题:

  • Java中int是32位有符号整数,取值范围为-2^31到2^31-1(也就是-2147483648到2147483647)
  • 你输入的几个大数值在反复执行奇数*3+1的运算过程中,结果会超出int的最大值限制,发生溢出后就会变成负数
  • 负数不满足while(n > 1)的循环条件,循环直接终止,最终输出错误的负数结果

修复方案

把所有参与运算的变量类型从int替换为取值范围更大的long(64位有符号整数,取值范围为-2^63到2^63-1,足够支撑考拉兹猜想的常规数值运算需求),还可以顺便调整输出分隔符和题目要求的>格式对齐,修正后的代码如下:

import java.util.*;
public class practice {
    // 参数类型改为long
    public static void solve(long n){
        while(n > 1){
            System.out.print(n + " > ");
            if(n % 2 == 0){
                n=n/2;
            }else{
                n=(3*n)+1;
            }
        }
        System.out.print(n);
    }
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        // 读取输入后转成long类型
        long input = keyboard.nextLong();
        solve(input);
    }
}

内容的提问来源于stack exchange,提问作者trashprogrammerD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:15:03