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!它给出了正确的答案,但是当价值更高时我输出错误
答案 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将生成更多有效因子。