N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 86344 Accepted Submission(s): 25402
Problem Description
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
One N in one line, process to the end of file.
Output
For each N, output N! in one line.
Sample Input
1 2 3
Sample Output
1 2 6
计算阶乘,使用long大概20的时候就超了,使用大数太慢。
应该使用数组的方式,考虑到N最大是10000,初步估算有四万位。
建立一个有长度为八千的int数组,每一个存放五位数。
import java.util.Scanner;
public class Main{
private static Scanner scanner;
public static void main(String[] args) {
scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
// n最大是100000,最多有40000位,一个num[i]放五位数字
int num[] = new int[8000];// 40000/5 = 8000
num[0] = 1;
int len = 1;// 记录有效数字到了哪了
for (int j = 2; j <= n; j++) {
for (int i = 0; i < len; i++) {
num[i] *= j;
}
for (int i = 0; i < len; i++) {
if (num[i] > 99999) {
num[i + 1] += num[i] / 100000;//
num[i] %= 100000;
}
}
if (num[len] != 0) {// 向前拓展一位
len++;
}
}
// System.out.println("len="+len);
// 前面这个不输出有效数前面的0
System.out.print(num[--len]);
while (len > 0) {
System.out.printf("%05d", num[len - 1]);
len--;
}
System.out.println();
}
}
}