大數階乘演算法
阿新 • • 發佈:2019-01-23
大數階乘
一般想到階乘都是用遞迴或者迴圈的方法,但是一旦所給數字的範圍很大就會越界,得到意想不到的結果,今天我將寫一種大數階乘的方法,演算法比較簡單,思路也容易想到.
程式碼如下:
//本題題目源於HDU 1042 計算N! #include <iostream> using namespace std; int main() { int n,i,j; while (cin>>n) { int flag=1; int carry=0; //設定進位 int res=0; int str[40000]; //根據題目要求設定陣列的大小 str[0]=1; for (i=2;i<=n;i++) //從2開始計算階乘 { for (j=1;j<=flag;j++) //根據進位flag大小來判斷當前階乘結果的的位數 { res=str[j-1]*i+carry; str[j-1]=res%10; carry=res/10; } while (carry) //當進位大於一時將結果擴充套件到下一位 { flag++; str[flag-1]=carry%10; carry/=10; } } for (i=flag-1;i>=0;i--) //將結果陣列倒序輸出,注意最後一位是"i=flag-1",因為"flag=1" 對應str[0],以此類推 { cout<<str[i]; } cout<<endl; } return 0; }