补之前的
输入一个正整数N,输出N的阶乘。0<=N<=1000
Examples:
Input:
4
15
Output:
24
1307674368000
Solutions
- 因为数字太大可能超出long long表示范围,所以用大正数乘法做
- 乘的过程有点不太一样,看代码
C++ Codes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include<stdio.h> #define width 3000
int main() { int i,j;
int k,t; int N;
int d[width];
while(scanf("%d",&N)!=EOF) { t=0; for(i=0;i<width;i++) d[i]=0; d[0]=1;
for(i=1;i<=N;i++) { k=0; for(j=0;j<=t;j++) { int tmp = d[j]*i+k; k=tmp/10; d[j]=tmp%10; }
while(k!=0){ d[++t]=k%10; k=k/10; } }
for(i=t;i>=0;i--) printf("%d",d[i]); printf("\n"); } return 0; }
|