HDU 1042 N!
N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 89844 Accepted Submission(s): 26564
题目链接->点击打开链接
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
Author
JGShining(极光炫影)
Recommend
Problem Idea
【类型】
C++ 大数阶乘 高精度模板题
【注意】
10000的阶乘,乘积4000位不够用,要40000位够用
AC Code
#include <iostream>
#include<cstring>
using namespace std;
const int nmax=40000;//10000的阶乘需要40000位
int d[nmax];//存放阶乘的各位
int main(int argc, char** argv) {
int n;
int i,j;
while(cin>>n){
memset(d,0,sizeof(d));
d[0]=1;
int t=0;
for(i=1;i<=n;i++){//1到n相乘,计算阶乘
int carry=0;
for(j=0;j<=t;j++){
int tmp=d[j]*i+carry;
d[j]=tmp%10;
carry=tmp/10;
}
while(carry!=0){
d[++t]=carry%10;
carry=carry/10;
}
}
for(int i=t;i>=0;i--){
printf("%d",d[i]);
}printf("\n");
}
return 0;
}