南陽理工テーマ28大数階乗
3786 ワード
大数次乗
時間制限:3000 ms|メモリ制限:65535 KB
難易度:3
説明
私たちはすべてどのように1つの数の階乗を計算するかを知っていますが、もしこの数が大きいならば、私たちはどのようにそれを計算して出力しますか?
入力
整数mを入力します(0しゅつりょく
mの乗算を出力し、出力終了後に改行を入力
サンプル入力
サンプル出力
ソース
クラシックテーマ
ぶんせき
大数次乗は実際には乗算をシミュレートして配列で格納します
乗算とは、2番目の数と1番目の数のそれぞれを乗算し、残りの数を残して、次の乗算後の数に商を加えることです.
例えば3の階乗は6,4の階乗は6*4で、4を残して、2を近づけて、0*4+2=2なので、結果は24です
時間制限:3000 ms|メモリ制限:65535 KB
難易度:3
説明
私たちはすべてどのように1つの数の階乗を計算するかを知っていますが、もしこの数が大きいならば、私たちはどのようにそれを計算して出力しますか?
入力
整数mを入力します(0
mの乗算を出力し、出力終了後に改行を入力
サンプル入力
50
サンプル出力
30414093201713378043612608166064768844377641568960512000000000000
ソース
クラシックテーマ
ぶんせき
大数次乗は実際には乗算をシミュレートして配列で格納します
乗算とは、2番目の数と1番目の数のそれぞれを乗算し、残りの数を残して、次の乗算後の数に商を加えることです.
例えば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
(
"
"
);
28.
return
0;
29.
}