Written by Robert_Wang in Southwest University of Science And Technology.
- 输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n≤10 6 ,n!表示
前n个正整数之积。
题目简单易懂,操作起来也很简单,但是看到n取10^6时,对于初学者来说就有点懵了,不着急,往下看。
分析: 此题培养的是数学中的实验思维,就是通过实验来发现结果的奇妙之处。
- 注意是计算末六位,所以应该讲结果%1000000;
- 由于n取很大时,阶乘的结果也会很大,所以在做阶乘的时候也要同时%1000000,才能保证不溢出;
package test;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final int Mod = 1000000;
int i,j,n;
int sum=0;
Scanner in = new Scanner(System.in);//计时开始
long starttime = System.currentTimeMillis();
n = in.nextInt();
if(n>25) n=25;
int fac = 1;
for(i=1; i<=n; i++) {
fac = fac*i%Mod;
sum+=fac;
sum%=Mod;
}
System.out.println(sum);
long endtime = System.currentTimeMillis();//计时结束
long totaltime = endtime - starttime;
System.out.println("总耗时 "+totaltime+" ms");
}
if(n>25) n=25;为什么会这样???????
那是因为当n大于25时,结果是一样的