1. 程式人生 > 其它 >c++的大數階乘演算法

c++的大數階乘演算法

#include<iostream>
using namespace std;
#include<string>
const int MAX = 3000;
int a[MAX];
int fac(int n) {
    memset(a, 0, sizeof(a));//初始化0;下面的a[j] = a[j] * i + c計算過程中會用到a[j]=0
    int top = 0;//最高位
    a[0] = 1;
    int c = 0;//用於判斷是否進位,也就是j是否+1。
    for (int i = 2; i <= n; i++) {//i為用來階乘的數字,就是2~n之間的數字
for (int j = 0; j <= top; j++) { //j迴圈用來將計算出來的結果按位分割並存儲到陣列中 a[j] = a[j] * i + c; c = a[j] / 10;//c就是下一次再次進入j迴圈時的a[j]初始值,結合下面的判斷語句 //如果這裡的c<10,top最高位就沒必要再加了,如果c>10,則繼續分割,知道c<10為止 if (j == top && c >= 1) { top
++; } a[j] = a[j] % 10;//取餘得到第j位上該放置的數字 } } for (int i = top; i >= 0; --i) { cout << a[i]; } return 0; } int main() { int n; cout << "請輸入一個數字n" << endl; cin >> n; fac(n); }