南陽理工テーマ28大数階乗

3786 ワード

大数次乗
時間制限: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. }