为什么这会在在线编译器中显示运行时错误? 谁能解释我... 这个代码在我的netbeans中运行良好,但在虚拟判断上给出了“RUNTIME ERROR”
问题陈述:
// **
即使这个世界充满了假货,我仍然认为它很棒。
堆积香草和香,并从其前身的火焰和灰烬中再次出现 - 众所周知,凤凰就是这样做的。
凤凰有着相当长的寿命,每一次都会转世!年份。这里一个!表示整数a的阶乘,即a! = 1×2×...×A。具体来说,0! = 1。
Koyomi对此并不在意,但在他陷入另一个奇怪的混乱之前,他对凤凰在b的一个时间内转世的次数感兴趣!年,也就是说。请注意,当b≥a时,此值始终为整数。由于答案可能非常大,因此Koyomi只需知道十进制表示的答案的最后一位就足够了。你在这里为Koyomi提供这方面的知识。
输入 第一个也是唯一一个输入行包含两个空格分隔的整数a和b(0≤a≤b≤1018)。
输出 输出一行包含一个十进制数字 - 感兴趣Koyomi的值的最后一位数。
实例 输入 2 4 产量 2 输入 0 10 产量 0 输入 107 109 产量 2 注意 在第一个例子中,最后一位是2;
在第二个例子中,最后一位是0;
在第三个例子中,最后一位是2.
** //
提前感谢.... 我在代码中找不到任何错误......问题是什么...... 用户输入:
输入
2 4
输出
2
输入
0 10
输出
0
输入
107 109
输出
2
在测试1中获得“RUNTIME ERROR”
package theeternalimortality;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static BigInteger fact(BigInteger x) {
BigInteger a = new BigInteger("1");
if (x.equals(BigInteger.ZERO))
return BigInteger.ONE;
else
return x.multiply(fact(x.subtract(BigInteger.ONE)));
}
public static void main(String[] args) {
Scanner ob = new Scanner(System.in);
BigInteger a = (BigInteger.ONE);
BigInteger b = (BigInteger.ONE);
BigInteger ans = (BigInteger.ONE);
BigInteger ans2 = (BigInteger.ONE);
BigInteger ans3 = (BigInteger.ONE);
a = ob.nextBigInteger();
b = ob.nextBigInteger();
ans = fact(a);
ans2 = fact(b);
ans3 = ans2.divide(ans);
ans3 = ans3.mod(BigInteger.TEN);
System.out.println(ans3);
}
}
答案 0 :(得分:0)
由于StackOverflow错误,可能失败了。要逃避这一点,请使用尾递归算法
public static BigInteger fact(BigInteger x) {
return factHelper(x, BigInteger.ONE);
}
pivate static BigInteger factHelper(BigInteger x, BigInteger acc) {
if (x.equals(BigInteger.ZERO))
return acc;
else
return factHelper(x.subtract(BigInteger.ONE), acc.multiply(x));
}