階乗の和(多数の乗算+の大規模な数の加算)

階乗の和

タイトル説明

高精度S = 1で計算!2!3!+ ... + nは!"!"(N≤50)は、前記のような要因を表し:5!= 3 * 5 * 4 * 2 * 1。

説明を入力します。

正の整数Nを入力します。

出力説明:

計算結果Sを出力します

例1

エントリー

3

輸出

9

 

考える:ここでは2つの関数の直接使用は解決するためにシミュレートされた手書きの加算や乗算の自分のコンピューティング大きな数字を書きます。

 

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <CStringの>
 4の#include <cmath>
 5の#include <アルゴリズム>
 6の#include <地図>
 7の#include < 設定 >
 8の#include <ベクトル>
 9# <キュー>などが
 10の#include <リスト>
 11の#include <unordered_map>
 12を 使用して 名前空間はstdを、
13  の#defineっ長い長い 
 14  のconst  int型 INF = 1E9 + 7   ;
16  
17  // MAXN =のconst int型
18  
19インライン列の和(文字列文字列 B)// 大数加法
20  {
 21      ながら(a.size()< b.size())
 22          a.insert(0" 0 " );
23      一方(b.size()< a.size())
 24          b.insert(0" 0 " )。
25      文字列 ANS = "" ;
26      INT= Jinwei 0 、SUM、優;
 27      用のint型 I = a.sizeを() - 1 ; I> = 0 ; i-- 28      {
 29          SUM =([I] - ' 0 ')+(B [ I] - ' 0 ')+ Jinwei;
 30          Jinwei = SUM / 10 ;
 31である          ゆう= SUMの%10 ;
 32の          ANSは+ =(ゆう+ ' 0 ' );
 33である     }
 34で     IF (Jinwei)
 35の          ANS + =(Jinwei + [0 " );
36      逆(ans.begin()、ans.end())。
37の     リターンANS;
38  }
 39  
40インライン MUL(文字列文字列 B)// 大数乘法
41  {
 42      であれば(a.size()< b.size())
 43          スワップ(B)
44      ストリング ANS = " 0 " 、RES。
45      文字になりました。
46      のためにint型 I = b.size() - 1 ; I> = 0 ; i--47      {
 48          のRES = "" ;
49は          今= B [I]を、    
50          のint jinwei = 0 、湯、S。    
51          のためにINT J = a.size() - 1 ; J> = 0 ; j-- 52          {
 53個の              (NOW-のS = ' 0 ')*([J] - ' 0 ')+ jinwei。
54              jinwei =秒/ 10 55              湯は、S%= 10 56             RES + =(ゆう+ ' 0 ' );
 57である         }
 58          IF (Jinwei)
 59の              RES + =(Jinweiが+ ' 0 ' );    
 60              
61である          リバース(res.begin()、res.end()); // 残りを追加、結果を逆に、必要逆行
62は、         
63である         ためINT J = 0 ; J <b.size() - I- 1。 ; J ++)// 高い乗算の終了時に0添加後
64              + = RESを" 0 " 65          ANS SUM =(ANS、RES); //は、その後追加
66      }
67の     リターンANS;
68  }
 69  
70  のint main()の
 71  {
 72の      IOS :: sync_with_stdio(); cin.tie(0); cout.tie(0 )。
73      INT N。
74      一方(CIN >> N)
 75      {
 76           ANS = " 0 " 77          ストリング S = " 1 " 78          のためにint型 i = 1 ; iが<= N; iが++)// 阶乘之和
79          {
 80              、S = MUL(S、to_stringに(I))。
81の              ANS = SUM(ANS、S)。
82          }
 83          COUT << ANS << ENDL。
84      }
 85      リターン 0 86 }

 

おすすめ

転載: www.cnblogs.com/xwl3109377858/p/11281584.html