我的代码显示了因子的错误输出

时间:2017-03-08 11:40:00

标签: java

class TestClass {

    public static void main(String args[] ) throws Exception {

        long n = 1;
        long ans = 1;
        Scanner s = new Scanner(System.in);
        long N = s.nextInt();
        long M = 1000000007;

        for (int i=1; i<=N; i++) {
            ans = (ans*i) % M;
        }
        System.out.println(ans);
    }
}

为5!它给出了正确的答案,但是当价值更高时我输出错误

2 个答案:

答案 0 :(得分:1)

你的long M = 1000000007;有问题。 (对于较窄的类型,这是旧的C方式的回归吗?)有效地减去1000000007的倍数以将数字大于或等于该数字回到范围内:并且结果将是是废话。

不要那样做。依靠Java作为最后的手段为你环绕。

然后只采用long类型的一个规则:由于long的范围在Java中是固定的,因此使用该类型可以评估的最大因子数也是固定的,恰好是20!

if (N > 20){
    /*an overflow will occur so inform the user of your program*/
}

执行此操作并完全删除M

答案 1 :(得分:0)

它基本上取决于您正在进行模块化操作的数字M.尝试通过增加M,如长M = 100000000000007L将生成更多有效因子。