要件:
印刷機能非負整数階乗を実装
Nは、渡されたユーザパラメータで、その値は1000以上ではありません。N整数非負の場合、この関数は、ラインN!バリュー、そうでない場合は、印刷「無効な入力」にプリントアウトする必要があります
1の#include <stdio.hの> 2 3 ボイド Print_Factorial(CONST INT N)。 4 INT メイン(){ 5 INT N。 6 のscanf(" %dの"、&N)。 7 Print_Factorial(N)。 8 リターン 0 ; 9 } 10 空隙 Print_Factorial(CONST INT N){ 11 であれば(N < 0 ){ 12の プット(" 無効な入力" )。 13 リターン; 14 } 15 16 INT NUM [ 3001 ] = { 0 }; 17 int型N- K; 18は K = 1 ; // ビット数 。19 N- = 0 ; // キャリー 20は NUM [ 0 ] = 1 ; 21である INT TMP ; 22は、 23である // 階乗の各要素を乗じた一時的な結果 24 のために(INT I = 2 ; I <= N I ++ ){ 25 のための(INTはJ = 0 ; J <K、J ++ ){ 26 TMP = NUM [J] * I + N。 27 NUM [J] = TMP%10 。 28 N = TMP / 10 。 29 } 30 ながら(N){ 31 NUM [K ++] = N%10 。 32 N / = 10 。 33 } 34 } 35 のために(INT I = K- 1、I> = 0 ; i-- ){ 36 のprintf(" %dの"、NUM [I])。 37 } 38 プット("" )。 39 }
- 長い長い10 ^ 18の範囲をINT、10 ^ 9の範囲の値int
- 結果は長いlong int型の範囲を超える場合= 12 Nは、計算結果が既に9、N = 1000である場合、スターリング式を用いて
- アナログ乗算階乗
参考:
https://blog.csdn.net/weixin_42584977/article/details/90771118