题目地址:http://poj.org/problem?id=1604
正确的做法是要保存尽可能多的末几位信息。
import java.util.*;
import java.math.*;
import java.text.*;
import java.io.*;
public class Main
{
public static void main(String[] args) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
long[] ans = new long[10000+5];
ans[1]=1;
long x=1;
for(int i=2;i<=10000;i++) {
x*=i;
while(x%10==0) x/=10;
ans[i]=x%10;
x%=100000; //精度保存5位非零的数字就好了
}
while(cin.hasNext()){
int n=cin.nextInt();
System.out.printf("%5d -> %d\n",n,ans[n]);
}
}
}