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

如何用Java根据阶乘结果查找对应的最小阶数

阶乘逆运算的Java实现

先理清你看到的示例逻辑

你给出的示例里最后一步应该是5/5 = 1(不是0),这是理解逻辑的核心:给定阶乘结果120,我们从1开始依次做整除操作,直到商变为1,最后一次的除数就是对应的阶数n:

  • 120 ÷ 1 = 120(整除,继续)
  • 120 ÷ 2 = 60(整除,继续)
  • 60 ÷ 3 = 20(整除,继续)
  • 20 ÷ 4 = 5(整除,继续)
  • 5 ÷ 5 = 1(整除,停止,此时除数5就是n)

实现思路

  1. 输入目标阶乘结果,先判断是否小于1(阶乘结果都是≥1的)
  2. 从i=1开始,用目标数依次除以i,每次必须能整除(否则说明输入不是阶乘结果)
  3. 每次除法后更新目标数为商,i递增1
  4. 当目标数变为1时,最后一次的除数就是n(注意循环结束时i会多增1,所以取i-1)

完整代码

import java.util.Scanner;

public class FactorialInverse {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入阶乘结果: ");
        long target = scan.nextLong();
        scan.close();

        // 阶乘结果最小是1(0!和1!都等于1)
        if (target < 1) {
            System.out.println("输入的数不是有效的阶乘结果");
            return;
        }

        long currentValue = target;
        int divisor = 1;
        while (currentValue != 1) {
            // 无法整除,说明不是阶乘结果
            if (currentValue % divisor != 0) {
                System.out.println("输入的数不是有效的阶乘结果");
                return;
            }
            currentValue = currentValue / divisor;
            divisor++;
        }

        // 循环结束时divisor已经多走了一步,所以实际阶数是divisor-1
        System.out.println("对应的最小阶数n是: " + (divisor - 1));
    }
}

测试示例

  • 输入120,输出对应的最小阶数n是: 5
  • 输入24,输出对应的最小阶数n是: 4
  • 输入7,输出输入的数不是有效的阶乘结果
  • 输入1,输出对应的最小阶数n是: 1(如果需要兼容0!,可以在target=1时额外判断,返回0或1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:33:23