階乘演算法
A. 階乘的公式是什麼
n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。
亦即n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。
資料來源:階乘_網路
B. 階乘計算
void fact(int n,int jc[])
{ int i,j,s;
int sum[300]={0}; //臨時存儲計算結果
sum[0]=1;
for(i=1;i<=n;i++)
{ for(j=1;j<300;j++)
sum[j]=ssum[j]*i;
for(j=1;j<299;j++) //十進制變換
if(sum[j]>9)
{ sum[j+1]=sum[j+1]+sum[j]/10;
sun[j]=sum[j]%10;
}
}
i=299;
while(sum[i]==0)
{ i--;}
s=i+1;//階乘的位數
jc[0]=s; //返回計算結果
for(i=1;i<=s;i++)
jc[i]=sum[s-i];
}
//調用示例
main()
{ int n,i,s;
int jc[300]; //定義一個存儲用的數組,注意數組元素個數不能過小,否則會溢出
printf("please input the num !");
scanf("%d",&n);
fact(n,jc);
s=jc[0];//取得階乘位數
printf("%d的階乘為\n",n);
for(i=s;i>=1;i--) //倒序列印
printf("%d",jc[i]);
}
C. 階乘的程序和演算法
沒說要什麼語言編寫的,我給你一個Java的:
public class Factorial
{ public static int factorial(int x)
{
if (x < 0)
{
throw new IllegalArgumentException("x must be>=0");
}
int fact = 1;
for(int i = 2; i <= x; i++)
{
fact *= i;
}
return fact;
}
public static void main(String args[])
{
System.out.print(factorial(10));
}
}
D. 階乘計算
1-20%=0.8
1000+1000*0.8^1+。。。。。1000*0.8^n=1000(1+0.8^1+。。。。。0.8^n)
=1000[(1-0.8^(n+1))/1-0.8]=5000*(1-0.8^(n+1))
(等比數列的前n項和公式)
E. 簡單階乘計算
如何實現一個階乘運算?
舉例
輸入:int n
比如n = 5, n = 8
輸出:int x
n = 5,5的階乘, 所以x = 120
n = 8,8的階乘,所以x = 40320
題目介紹
階乘問題是一個簡單的數學問題,今天我們之所以提到這個問題是因為它和recursion之間有著不解之緣。有些同學可能能夠迅速用recursion的方法做出這道題目,但是對recursion本身的了解並沒有那麼透徹。提到recursion,階乘問題可以作為一個典型的例子,讓大家能夠由淺入深地了解recurion。這道階乘運算是Microsoft的面試題之一,而跟recursion相關的題型也是大家在許多公司的面試中會遇見的。
今天希望大家忘掉這道題目的答案,跟我一起重新思考。階乘是指用1乘以2乘以3乘以4,一直乘到所要求的數。例如所要求的數n = 5,則結果 x = 1 × 2 × 3 × 4 × 5,這里的乘積x就是n的階乘。
分析題意
階乘是指用1乘以2乘以3乘以4,一直乘到所要求的數。例如所要求的數n = 5,則結果 x = 1 × 2 × 3 × 4 × 5,這里的乘積x就是n的階乘。
分析解題思路
了解了階乘的定義以後,我們可以思考一個問題,我們想要知道n的階乘,那麼只需要知道n - 1的階乘,我們想要知道n - 1的階乘,那麼只需要知道n - 2的階乘,也就是說規模為n的問題,轉化為了規模更小的問題。根據這個性質,我們應該自然而然的聯想到recursion。
這里讓我們一起回顧一下什麼是recursion,在表象上recursion是直接或者間接調用自身函數的方法,而本質上是把一個大規模的問題變成比它小一個規模的問題。
既然如此,對於這道題目,我們可以試著用recursion的思想來解決。解決recursion的問題,我們第一步要想base case是什麼,即最小規模的問題是什麼, 這也是這個函數的終止條件,沒有這個條件,我們所寫的函數就會永無止境的運行下去。那麼對於階乘來說,當n <= 1的時候(在這里我們不考慮負數,0! = 1, 1! = 1),結果都是1,這就是它的最小規模問題。
第二步我們開始思考recursion rule,怎樣把這個問題變成更小規模的問題。比如我們想解決n的階乘,那麼我們只要解決n - 1的階乘,最後再用(n - 1)的階乘乘以n就是我們想要的結果。
所以如果n = 5,那麼5的階乘和5 * factorial(4)的結果相同。
綜合第一步和第二步,我們可以開始編寫階乘函數:
int factorial (int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
在這個方法中我們需要注意返回的類型是int,所以它可以解決的階乘數也是有范圍的。
F. 階乘怎麼算啊
如果要精確計算階乘,階乘沒有什麼簡便方法,只能一個一個的往下乘。
這也是為何要專門用一個!來表示階乘。
如果只想計算大概的值,可以用「
斯特林公式」
(請自行網路)。
其實想想也很自然,
100!=1x2x3x...x10x11x12x...x20x21x...x99x100,
從10以後,每乘一次,這個數就至少增加一位,所以這個數就是寫出來,也至少是100位左右的數字,假設有的話,這個公式該多復雜。