南陽理工題目28大數階乘
阿新 • • 發佈:2019-01-31
大數階乘
時間限制:3000 ms | 記憶體限制:65535 KB 難度:3- 描述
- 我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它?
- 輸入
- 輸入一個整數m(0<m<=5000)
- 輸出
- 輸出m的階乘,並在輸出結束之後輸入一個換行符
- 樣例輸入
-
50
- 樣例輸出
-
30414093201713378043612608166064768844377641568960512000000000000
- 來源
- 經典題目
分析
大數階乘其實就是模擬乘法然後用陣列去儲存
乘法就是把第二個數和第一個數的每一位都相乘,然後把餘數留下,然後把商加到下一位相乘後的數上面
例如3的階乘是6,4的階乘就是6*4,把4留下,2近上去,0*4+2=2,所以結果是24
01.
#include<stdio.h>
02.
#include<string.h>
03.
const
int
maxn
= 16400;
04.
int
f[maxn];
05.
int
main()
06.
{
07.
int
i,
j, n,c;
08.
scanf
(
"%d"
,
&n);
09.
f[0]=1;
10.
for
(i=2;
i<=n; i++)
11.
{
12.
c=0;
13.
for
(j=0;
j<maxn; j++)
14.
{
15.
int
s=f[j]*i+c;
16.
f[j]=s%10;
17.
c=s/10;
18.
}
19.
}
20.
for
(i=maxn-1;
i>=0; i--)
21.
{
22.
if
(f[i])
23.
break
;
24.
}
25.
for
(j=i;
j>=0; j--)
26.
printf
(
"%d"
,f[j]);
27.
printf
(
"\n"
);
28.
return
0;
29.
}