這個問題其實並不難,主要是要採用合理的資料結構。
我用的是陣列,int mul[1000],並將每個元素限定在 unit = 100 即 100 進製。
效率的確是有待改進,不過除非你要算宇宙的大小,否則耗時可以忽略不計。
關鍵是簡短易懂,可移植。
1#include
<
stdio.h
>23
#define
unit 10045
void
factorial(
intn);67
intmul[
1000
]; /*
1000 個元素, 每個最大為100, 能表達的數超過 1e99,足夠了 */8
9int
main()
1023
24void
factorial(
intn)
2544}45
factorial(n-1
);46}47
}
上面的**有個對0的列印問題(詳見1樓),已進行修正:
1#include
<
stdio.h
>23
#define
unit 1000
4#define
mul 10000056
void
factorial(
long
intn);78
intmul[mul];
/*每個元素規模為 unit,共 mul 個,總共能儲存 unit ^ mul 規模資料 */9
10int
main()
1129
else
fprintf(fp, "%d
", mul[i]);30}
31getchar();
32fclose(fp);
33exit(0);
34}3536
void
factorial(
long
intn)
3756}57
factorial(n-1
);58}59
}
求算大數(比如100)階乘的思路
求算大數 比如100 階乘的思路 可以把n 的結果放在陣列中,陣列中每個元素都表示n 值的一位.對整數範圍內的n,求n 對於輸入的n想辦法晝精確地估計出n 所佔的位數.就能確定陣列元素的個數 可以將n 表示成10的次冪,即n 10 m 10的m次方 則不小於m的最小整數就是 n 的位數,對該式兩邊取...
遞迴求階乘
遞迴做為一種演算法在程式語言中廣泛應用.是指函式 過程 子程式在執行過程式中直接或間接呼叫自身而產生的重入現像.程式呼叫自身的程式設計技巧稱為遞迴 recursion 注意 1 遞迴就是在過程或函式裡呼叫自身 2 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。遞迴演算法一般用於解決三...
c語言求大數階乘,10000的階乘
10000以內階乘,在c語言中沒有型別可以以儲存這麼大的數,所以我們可以用陣列來存它,int a 10005 這裡10005只是習慣,當然,也可以用斯特靈公式來算a陣列的大小 下面附上 題解請看 注釋,include int a 100000 int main 這層迴圈使得a陣列每個數都是個一位數 ...