PTA - 階乗の6-10アップグレード版

 要件:

印刷機能非負整数階乗を実装

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

おすすめ

転載: www.cnblogs.com/cxc1357/p/12222823.html
おすすめ