用遞迴演算法,求n!的精確值(n以一般整數輸入,n<100)。
輸入乙個整數n
輸出n!
10
10!=3628800
顯然100資料規模的階乘是無法用longlong存下的,所以我選擇用陣列來模擬大數乘法,具體**實現是從社團學姐那裡學到的,這裡附上我的理解:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define max 10001
#define ll long long int
#define scf(a) scanf("%d", &a)
#define mms(a) memset(a, 0, sizeof(a))
using
namespace std;
int num[
100]
, endn =0;
void
bignum
(int n)
while
(temp)
//如果乘完了但是temp不為0,則還需要進製
bignum
(n -1)
;//遞迴繼續與n-1相乘
}int
main()
}
一開始發現long long不夠用的時候,我第一反應也是用陣列來模擬乘法,但是當時腦子裡一直想的都是列豎式計算的時候的進製方法,也就是一位一位的去跟所有數乘,然後每次只會進一位。在看了學姐的**之後才恍然大悟,可以每次直接用n去和陣列的每一位數字相乘,多出來的數全部進製就好,不用顧忌「進製的數有好幾位怎麼辦」這樣愚蠢的問題。。。 遞迴方法求n 階乘
遞迴的定義 在定義乙個過程或函式時,出現呼叫本過程或者是本函式的成分,稱之為遞迴。通常需要用到遞迴的方法 定義是遞迴的。例如n fibonacci數列問題 資料結構是遞迴的 單鏈表的資料結構,二叉樹的資料結構 問題的求解方式是遞迴的 漢諾塔問題 用遞迴和非遞迴兩種方式求n 問題 include in...
C語言 遞迴求n的階乘
例30 c語言求n!要求用遞迴實現。解題思路 本題和例29思想差不多,都是用遞迴來實現,讀者可以回顧一下 c語言遞迴求年齡 求階乘函式 int factorial int number 自定義階乘函式 else if number 0 number 1 0或者1本身的階乘是1 else return...
C語言 遞迴求n的階乘
例30 c語言求n!要求用遞迴實現。解題思路 本題和例29思想差不多,都是用遞迴來實現,讀者可以回顧一下 c語言 遞迴求年齡 求階乘函式 int factorial int number 自定義階乘函式 else if number 0 number 1 0或者1本身的階乘是1 else retur...