如何用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的)
- 从i=1开始,用目标数依次除以i,每次必须能整除(否则说明输入不是阶乘结果)
- 每次除法后更新目标数为商,i递增1
- 当目标数变为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
相关产品推荐
相关产品推荐

