java代码显示在线编译器

时间:2018-06-09 11:47:31

标签: java

为什么这会在在线编译器中显示运行时错误? 谁能解释我... 这个代码在我的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);

    }

}

1 个答案:

答案 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));
}