0
点赞
收藏
分享

微信扫一扫

HDOJ1042 N!


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();
}
}
}



举报

相关推荐

0 条评论