怎樣計算階乘

2021-03-08 19:05:00 字數 5368 閱讀 9743

1樓:快樂如風

由於階乘運算的增長速度特別快(比2^n的增長速度快),對於較小整數的階乘運算採用簡單的遞規演算法可以實現,但是對於大整數的乘法(比如1000!),則傳統的遞規演算法就失去了作用。

由於本人的水平不高,用下列拙劣的方式實現,請高人多多指教。具體如下:定義一個很長的陣列,用陣列的每一項表示計算結果的每一位。

例如,7!=5040,a[1000],則a[0]=0,a[1]=4,a[2]=0,a[3]=5。

程式源**:

/***計算大數的階乘,演算法的主要思想就是將計算結果的每一位用陣列的一位來表示:如要計算5!,那麼首先將

*(1) a[0]=1,然後a[0]=a[0]*2,a[0]=2,

*(2) a[0]=a[0]*3,a[0]=6

*(3) a[0]=a[0]*4,a[0]=24,此時a[1]=2,a[0]=4

2樓:五嶽獨尊

階乘演算法(0---10000)

#include

#include

#include

const int n=1000;

int ***pute(unsigned int *s,int n)//s用來儲存一次的計算結果,n為本次計算的乘數,函式返回結果中有效資料的節數

cout<

//釋放空間

free(s);}

3樓:匿名使用者

「階乘」即從1開始的連續自然數相乘的積,即n!=1*2*3...*n,這就是它的計算公式。

由於階乘運算的增長速度特別快(比2^n的增長速度快),對於較小的正整數的階乘運算可採用簡單的筆算,但是對於較大的正整數可用計算器或計算機。注意:當正整數過大時,計算器和計算機也算不出來!

當然,有一個近似的公式,斯特林公式:n!≈[√(2πn)[*(n/e)^n ,π和e是無理數,π≈3.14159 ,e≈2.71828

斯特林公式的最大好處就是把階乘化成了指數的形式,在精度不高的情況下,可以使用。

0!=1(規定)

1!=1

2!=1*2=2

3!=1*2*3=6

4!=1*2*3*4=24

5!=1*2*3*4*5=120

6!=1*2*3*4*5*6=720

......

4樓:匿名使用者

通俗的講,誰的階乘就是從誰開始乘,一直乘到1為止比如1!=1

2!=2*1

3!=3*2*1

……9!=9*8*7*6*5*4*3*2*1……n!=n(n-1)(n-2)(n-3)……3*2*1要注意,(1)0!=1這是規定的

(2)階乘拿手算只能一個一個乘,不過可以藉助 計算機來求較大數的階乘

5樓:小靈龍

參考資料

6樓:匿名使用者

大整數階乘的運算(可以計算1000!)

由於階乘運算的增長速度特別快(比2^n的增長速度快),對於較小整數的階乘運算採用簡單的遞規演算法可以實現,但是對於大整數的乘法(比如1000!),則傳統的遞規演算法就失去了作用。

由於本人的水平不高,用下列拙劣的方式實現,請高人多多指教。具體如下:定義一個很長的陣列,用陣列的每一項表示計算結果的每一位。

例如,7!=5040,a[1000],則a[0]=0,a[1]=4,a[2]=0,a[3]=5。

程式源**:

/***計算大數的階乘,演算法的主要思想就是將計算結果的每一位用陣列的一位來表示:如要計算5!,那麼首先將

*(1) a[0]=1,然後a[0]=a[0]*2,a[0]=2,

*(2) a[0]=a[0]*3,a[0]=6

*(3) a[0]=a[0]*4,a[0]=24,此時a[1]=2,a[0]=4

*/public class factorial

for(; c != 0; i++)

a[0] = i - 1;}}

public static void main(string args)

system.out.println("\n"+count);}}

7樓:偶是書痴

階乘的定義] 設n為自然數,則

n!=1⋅2⋅3⋯n

稱為n的階乘.並且規定0!=1.又定義

(2n+1)!!= (2n+1)! 2 n n!

=1⋅3⋅5⋯(2n+1), (−1)!!=0 (2n)!!= 2 n n!

=2⋅4⋅6⋯(2n), 0!!=0

8樓:匿名使用者

呵呵就是從1到n的連續自然數相乘

比如5的 階乘就是1×2×3×4×5

6的 階乘就是1×2×3×4×5×6

100的 階乘就是1×2×3×4×。。。×100懂了吧!?

9樓:匿名使用者

哇!!!!1樓的人c語言學的真好。我都忘光了,記得當初還編譯過的,現在全忘了。真厲害啊/

階乘的公式是什麼

10樓:老衲吃橘子

n!=1×2×3×...×n。階乘亦可以遞迴方式定義:0!=1,n!=(n-1)!×n。

亦即n!=1×2×3×...×n。階乘亦可以遞迴方式定義:0!=1,n!=(n-1)!×n。

雙階乘用「m!!」表示。

當 m 是自然數時,表示不超過 m 且與 m 有相同奇偶性的所有正整數的乘積。如:

當 m 是負奇數時,表示絕對值小於它的絕對值的所有負奇數的絕對值積的倒數。

當 m 是負偶數時,m!!不存在。

任何大於等於1 的自然數n 階乘表示方法:

11樓:sky註冊賬號

n!=1×2×3×...×n或者0!=1,n!=(n-1)!×n例如,求1x2x3x4...xn的值,此時可以用階乘的方式表示:

n!=1×2×3×...×(n-1)n或者n!=(n-1)!×n一個正整數的階乘(factorial)是所有小於及等於該數的正整數的積,並且0的階乘為1。自然數n的

階乘寫作n!。2023年,基斯頓·卡曼引進這個表示法。階乘常用於計算機領域。

大於等於1

任何大於等於1 的自然數n 階乘表示方法:

n!=1×2×3×...×(n-1)n或n!=(n-1)!×n0的階乘

其中0!=1

12樓:匿名使用者

公式:n!=n*(n-1)!

階乘的計算方法

階乘指從1乘以2乘以3乘以4一直乘到所要求的數。

例如所要求的數是4,則階乘式是1×2×3×4,得到的積是24,24就是4的階乘。 例如所要求的數是6,則階乘式是1×2×3×..×6,得到的積是720,720就是6的階乘。

例如所要求的數是n,則階乘式是1×2×3×…×n,設得到的積是x,x就是n的階乘。

階乘的表示方法

在表達階乘時,就使用「!」來表示。如x的階乘,就表示為x!

他的原理就是反推,如,舉例,求10的階乘=10*9的階乘(以後用!表示階乘)那麼9!=?

,9!=9*8!,8!

=8*7!,7!=7*6!

,6!=6*5!,5!

=5*4!,4!=4*3!

,3!=3*2!,2!

=2*1!,1的階乘是多少呢?是1 1!

=1*1,數學家規定,0!=1,所以0!=1!

然後在往前推算,公式為n!(n!為當前數所求的階乘)=n(當前數)*(n-1)!

(比他少一的一個數n-1的階乘把公式列出來像後推,只有1的!為1,所以要從1開始,要知道3!要知道2!

就要知道1!但必須從1!開始推算所以要像後推,如果遍程式演算法可以此公式用一個函式解決,並且巢狀呼叫次函式,,)把數帶入公式為, 1!

=1*1 2!=2*1(1!) 3!

=3*2(2!) 4=4*6(3!),如果要是程式設計,怎麼解決公式問題呢

首先定義演算法

//演算法,1,定義函式,求階乘,定義函式fun,引數值n,(#include

long fun(int n ) //long 為長整型,因20!就很大了超過了兆億

(數學家定義數學家定義,0!=1,所以0!=1!,0與1的階乘沒有實際意義)

2,函式體判斷,如果這個數大於1,則執行if(n>1)(往回退算,這個數是10求它!,要從2的階乘值開始,所以執行公式的次數定義為9,特別需要注意的是此處,當前第一次寫入**執行,已經算一次)

求這個數的n階乘(公式為,n!=n*(n-1)!,並且反回一個值,

return (n*(fun(n-1));(這個公式為,首先這個公式求的是10的階乘,但是求10的階乘就需要,9的階乘,9的階乘我們不知道,所以就把10減1,也就是n-1做為一個新的階乘,從新呼叫fun函式,求它的階乘然後在把這個值返回到 fun(n-1),然後執行n*它返回的值,其實這個公式就是呼叫fun函式的結果,函式值為return 返回的值,(n-1)為引數依次類推,...一值巢狀呼叫fun函式,

到把n-1的值=1,

注意:此時已經執行9次fun()函式算第一次執行,,呼叫幾次fun函式呢?8次函式,所以,n-1執行了9次,n-1=1 ,n=2已經呼叫就可以求2乘階值

13樓:天涯客

除了樓上說的階乘,還有一種叫雙階乘,用!!表示,一個感嘆號是階乘,兩個感嘆號是雙階乘,雙階乘的演算法,比如

7!!=1*3*5*7

8!!=2*4*6*8

14樓:葬花的饕餮

n!=1×2×3×...×n。階乘亦可以遞迴方式定義:0!=1,n!=(n-1)!×n。

階乘是基斯頓·卡曼(christian kramp,1760~1826)於 1808 年發明的運算子號,是數學術語。

一個正整數的階乘(factorial)是所有小於及等於該數的正整數的積,並且0的階乘為1。自然數n的階乘寫作n!。2023年,基斯頓·卡曼引進這個表示法。

擴充套件資料

嚴謹的階乘定義應該為:對於數n,所有絕對值小於或等於n的同餘數之積。稱之為n的階乘,即n!

對於複數應該是指所有模n小於或等於│n│的同餘數之積。。。對於任意實數n的規範表示式為:

正數 n=m+x,m為其正數部,x為其小數部

負數n=-m-x,-m為其正數部,-x為其小數部

一得階乘分之一加二的階乘分之一n的階乘分之一

include include main printf e f n e includeint a int n int main 編寫函式,計算s 1 2的階乘分之一 3的階乘分之一 n的階乘分之一,然後編寫主函式 include using namespace std int f int i int...

為什麼0的階乘等於,為什麼0的階乘等於

說的簡單一點是人為規定的,但它是有道理的,你想過沒有,為什麼不規定0!0呢?因為階乘是一個遞推定義,n n n 1 那麼必然有一個初值需要人為規定。我們知道1 1,根據1!1 0!所以0!1而不是0或其他的值。0 是人為規定出來的.因為 n 1 n n 當n 1時,0 1 1 1 即0 1,這是為了...

用c 語言求n的階乘,用c 語言求n的階乘

1 開啟vs6.0軟體,準抄備一個後襲綴為cpp的檔案,在c 檔案中首先寫入標頭檔案,定義一個處理階乘的函式,接著寫一個空的main函式 2 接著是階乘recv函式邏輯,該函式有一個形參n用來接收輸入的數。n的階乘是所有正整數的乘積,這裡的處理是sum不斷的用遞迴的方法乘以recv函式的輸入數,每次...