分析:
题目中已经给了我们算法的大概思想,高精度计算,用数组实现。
Java代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i,j;
int jw = 0; //进位
int temp; //存放中间结果
int max = 4000; //4000位
int[] a = new int[max];
a[0] = 1;
for(i = 2; i <= n; i ++) {
for(j = 0; j < max; j++) {
temp = a[j] * i + jw;
jw = temp / 10;
a[j] = temp % 10;
}
}
//找出前置0和结果之间的界限
for(i = max-1;i >= 0;i --){
if(a[i] != 0)
break;
}
//倒序输出
for(j = i;j >= 0;j --)
System.out.print(a[j]);
}
}
关于max的值,一开始只设了100,代码提交之后答案45% 错误。应该是太小了,第二次将max设为100,答案27%错误,第三次将max改为4000,才完全正确。