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

Java 19中int类型可计算的最大阶乘及long类型实现咨询

Java中int和long类型的阶乘计算问题

一、int类型能计算的最大正确阶乘

是的,int类型能正确计算的最大阶乘是12!。

Java里int是32位有符号整数,取值范围是-2147483648到2147483647。实际计算验证:

  • 12! = 479001600,这个数在int的范围内,结果完全正确;
  • 13! = 6227020800,已经远超int的最大值,会触发整数溢出,得到错误的结果(通常是负数或无意义的正数)。

你的递归代码逻辑没问题,运行后确实会在n≥13时输出"Trop grand"并返回-1,12及以下的输入都能得到正确的阶乘结果,和你观察到的一致。

二、用long类型实现阶乘函数

Java的long是64位有符号整数,取值范围比int大得多,能支持计算到20!(20! = 2432902008176640000),21!及以上的结果会超出long的最大值,同样会溢出。

递归实现代码

public static long factorial(long n) {
    // 处理负数输入
    if (n < 0) {
        System.out.println("负数没有阶乘");
        return -1;
    }
    // 限制最大输入,避免long溢出
    if (n > 20) {
        System.out.println("数值过大,long类型无法存储正确结果");
        return -1;
    }
    // 阶乘终止条件:0! = 1
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

非递归(循环)实现代码

如果担心递归深度问题(虽然阶乘到20完全不存在这个问题),也可以用循环实现:

public static long factorialLoop(long n) {
    if (n < 0) {
        System.out.println("负数没有阶乘");
        return -1;
    }
    if (n > 20) {
        System.out.println("数值过大,long类型无法存储正确结果");
        return -1;
    }
    long result = 1;
    for (long i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

你之前失败的可能原因

如果之前尝试没得到预期结果,大概率是这几个问题:

  • 没有限制n的最大值(超过20还继续计算,导致long溢出,结果错误);
  • 没处理负数输入的情况;
  • 递归的终止条件写错(比如漏了0!返回1的逻辑)。

内容的提问来源于stack exchange,提问作者Big Moustache guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:25:57