常見的有兩種:
10年積累的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有天柱免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
遞歸版本:
int?Fac(int?n){
if(n==0)?return?1;
return?n*Fac(n-1);
}
還有一種是循環(huán)版:
int?ans=1;
for(int?i=1;i=n;i++)?ans*=i;
測試方法:
#includestdio.h
int?Fac(int?n){
if(n==0)?return?1;
return?n*Fac(n-1);
}
int?main(){
int?n;
while(scanf("%d",n)!=EOF){
int?ans=1;
for(int?i=1;i=n;i++)?ans*=i;
printf("%d?%d\n",ans,Fac(n));
}
return?0;
}
有個值得注意的地方:階乘時,數(shù)增大的很快,在n達(dá)到13時就會超過int的范圍,此時可以用long long或是 __int64來存儲更高精度的值,如果還想存儲更高位的,需要用數(shù)組來模擬大數(shù)相乘。
你的函數(shù)原型是這個int
jiecheng(int
a);調(diào)用的卻是
s=jiecheng();
沒有傳參進(jìn)去,所以報錯,應(yīng)該改為:
int
s;
int
result;
scanf("%d",s);
result=jiecheng(s);
另外,還要做一個特殊處理,比如:當(dāng)參數(shù)為零時,輸出為1;當(dāng)參數(shù)為-1時,輸出0;當(dāng)為負(fù)數(shù)時,提示不正確
n的階乘就是從1到的累積,所以可以通過一個for循環(huán),從1到n依次求積即可。
參考代碼:
#include "stdio.h"
int main() {
int n,i,s=1;
scanf("%d",n);
for(i=1;i=n;i++)//for循環(huán)求累積
s=s*i;
printf("%d\n",s);
return 0;
}
/*
運行結(jié)果:(例如求5的階乘)
5
120
*/
擴(kuò)展資料:?
return用法:
return返回一個數(shù)值的意思就是把return表達(dá)式后面表達(dá)式的值返回給調(diào)用他的函數(shù)。舉個例子:
int sum(int i,int j)
{
return i+j;
printf("這個語句不會被執(zhí)行,因為該子函數(shù)執(zhí)行到上面的return語句就無條件結(jié)束了");
}
main()
{
int a=10,b=11,c;
c=sum(a,b);
printf("%d",c);
}
調(diào)用階乘子函數(shù)
int
fun(int
u)
{
int
i,s=1;
for(i=1;i=u;i++)
s*=i;
return
s;
}
不過由于階乘往往是很大的數(shù),這個函數(shù)調(diào)用只限于比較小的數(shù)。
大的數(shù)的階乘可以通過對數(shù)轉(zhuǎn)換來求得,然后用科學(xué)記數(shù)法輸出。
1、打開vs2017軟件,新建c語言的工程,首先開頭引入頭文件,然后調(diào)用先調(diào)用一下求階乘的函數(shù)和空的主函數(shù),最下方定義prime函數(shù)用來求階乘:
2、主函數(shù)中用scanf函數(shù)接受用戶輸入的的數(shù)字,接著將輸入的數(shù)傳入處理階乘的函數(shù)中完成計算,最后輸出打印結(jié)果。prime函數(shù)有一個參數(shù),首先判斷是否為正數(shù),然后用prime函數(shù)自身乘以參數(shù)s,最后返回值即可完成:
3、將程序編譯運行,彈出窗口輸入任意的數(shù),計算階乘;這里輸入7,得到結(jié)果是5040。以上就是C語言求階乘的方法:
你好,C語言中默認(rèn)的只有l(wèi)ong
int
short的整數(shù)類型,如果數(shù)過大最好使用double,
或則使用第三方大整數(shù)運算(可以去網(wǎng)上百度下代碼),請注意數(shù)據(jù)如果太大最好用double
希望能幫到你!望采納!