1
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),香坊企業(yè)網(wǎng)站建設(shè),香坊品牌網(wǎng)站建設(shè),網(wǎng)站定制,香坊網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,香坊網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
設(shè)計(jì)階乘函數(shù)。
按照數(shù)學(xué)定義,對于n的階乘,如果n為0,則返回1.
否則返回1*2*3*...*n的值。用循環(huán)實(shí)現(xiàn)。
2
在主函數(shù)中輸入要求階乘的值。
3
調(diào)用函數(shù)計(jì)算階乘。
4
輸出結(jié)果。
代碼:
int fac(int n)
{
int r = 1;
int i;
for(i = 2; i =n; i ++)
r*=i;
return r;
}
int main()
{
int n,r;
scanf("%d",n);
r = fac(n);
printf("%d!=%d\n",n,r);
}
常見的有兩種:
遞歸版本:
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;
}
有個(gè)值得注意的地方:階乘時(shí),數(shù)增大的很快,在n達(dá)到13時(shí)就會(huì)超過int的范圍,此時(shí)可以用long long或是 __int64來存儲(chǔ)更高精度的值,如果還想存儲(chǔ)更高位的,需要用數(shù)組來模擬大數(shù)相乘。
其實(shí)這個(gè)只能算到12的階乘,因?yàn)?3的階乘等于6227020800,它已經(jīng)大于2的31次方了,也就是超過了int所能表示的最大值了(溢出),所以你可以把int
改為double.
#include
stdio.h
#include
stdlib.h
double
f(int
n)
{
if(n==0||n==1)
return
1;
return
n*f(n-1);
}
int
main()
{
int
n,k,i;
printf("請輸入一個(gè)數(shù):");
scanf("%d",k);
for(i=1;i=k;i++)
{
printf("第%d個(gè)數(shù)為:",i);
scanf("%d",n);
printf("%d!=%f\n",n,f(n));
}
}
我把你寫的稍微改了一下,你看看。