㈠ 編程代碼.高手指教設計Function過程計算:S=1!+3!+……+10!
這題首先有個不明白的地方:是連續的項的階乘和?(那為什麼沒有2。。。)還是連續的奇數項的階乘和?(那為什麼有10。。。)
不管怎麼樣(我就當是連續的項的階乘和吧)思想是一樣的。
首先,設計一個函數f(intx)計算x的階乘,然後S=f(1)+f(2)+...+f(10)
inta[16];
intf(intx){//函數:計算每一個參數x的階乘
if(x==0)
returna[x]=1;
returna[x]=x*f(x-1);//用a[x]記錄中間值,減少不必要的重復計算
}
與一般的遞歸函數不一樣的在於,用一個數組,記錄中間值,這樣以後用到這些值時,可以避免大量對其的重復計算,直接調用以前算過的結果即可。
下面是所有的源代碼:
#include<iostream>
usingnamespacestd;
inta[16];
intf(intx){//函數:計算每一個參數x的階乘
if(x==0)
returna[x]=1;
returna[x]=x*f(x-1);//用a[x]記錄中間值,減少不必要的重復計算
}
intF(intn){//函數:計算1-n的連續階乘和
intsum=0;
for(inti=1;i<=n;i++)
sum+=f(i);
returnsum;
}
voidprint(intn){//函數:列印1-n的每個參數的階乘值
for(inti=1;i<=n;i++)
cout<<i<<"!="<<f(i)<<endl;
}
intmain(){
cout<<F(10)<<endl;
print(10);
system("pause");
return0;
}
執行結果,截圖:
希望我的回答能對你有幫助~O(∩_∩)O~
㈡ C語言中如何編程計算階乘
常見的有兩種:
遞歸版本:
intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}
還有一種是循環版:
intans=1;
for(inti=1;i<=n;i++)ans*=i;
測試方法:
#include<stdio.h>
intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}
intmain(){
intn;
while(scanf("%d",&n)!=EOF){
intans=1;
for(inti=1;i<=n;i++)ans*=i;
printf("%d%d ",ans,Fac(n));
}
return0;
}
有個值得注意的地方內:階乘時,數增大容的很快,在n達到13時就會超過int的范圍,此時可以用long long或是 __int64來存儲更高精度的值,如果還想存儲更高位的,需要用數組來模擬大數相乘。
㈢ c語言如何計算階乘
法/步驟
第一步、編程的第一步就是寫頭文件,對於初學者來說,只寫一個頭文件就可以了,即#include<stdio.h>
拓展資料
定義
n!=1×2×3...xn
n!=X×(X-1)×(X-2)...×1
1751年,歐拉以大寫字母M表示m階乘M=1x2x3...x...m
1799年,魯非尼在他出版的方程論著述中,則以小寫字母π表示m階乘。而在1813年,高斯則以Π(n)來表示n階乘。而用來表示n階乘的方法起源於英國,但仍未能確定始創人是誰。直至1827年,由於雅萊特的建議而得到流行,現在有時也會以這個符號作為階乘符號。
當n較大時,直接計算n!變得不可能,這時可通過斯特靈(Stirling)公式計算近似算或取得大小范圍。