求階乘沒(méi)必要弄這么復(fù)雜,你非要用遞歸算法求階乘也行,問(wèn)題出在輸入負(fù)數(shù)時(shí),要有c語(yǔ)言終止程序的代碼。
桂林網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
這段代碼就是:exit(-1);?
修改源程序
得到正確結(jié)果
在整數(shù)表示范圍內(nèi)得到正確結(jié)果
不過(guò)源程序還是有問(wèn)題,如果階乘的最終結(jié)果數(shù)值非常大時(shí),超出int的表示范圍,就會(huì)出錯(cuò)。
超出整數(shù)表示范圍得到錯(cuò)誤結(jié)果
這就需要修改數(shù)據(jù)類型int為double,這里給出更簡(jiǎn)單的代碼:
得到正確的運(yùn)行結(jié)果:
修改數(shù)據(jù)類型可得到正確的結(jié)果
可能是超出了整數(shù)所能表達(dá)的范圍。因?yàn)橥ǔU麛?shù)的范圍是-32768~32767。建議你把n和乘積的變量定義成長(zhǎng)整型或者浮點(diǎn)型即可。
long double 改為 double,
%d 改為?%lf
#include?stdio.h
int?main()
{
double?s?=?0,?t?=?1,?n;
for?(n?=?1;?n?=?20;?n++)
{
t?*=?n;
s?+=?t;
}
printf("1!+2!+3!+...+20!?=?%.0lf\n",s);
return?0;
}
//?輸出:1!+2!+3!+...+20!?=?2561327494111820288
另外,你的程序求的是 19!。
你計(jì)算100!呀,int存不下的,這個(gè)結(jié)果太大了,溢出了,所以可能會(huì)出現(xiàn)結(jié)果為負(fù)數(shù),哪怕不是負(fù)數(shù)結(jié)果也不是正確的。
20的階乘是一個(gè)很大很大的數(shù),你定義一個(gè)int型變量是不夠的,溢出了,用浮點(diǎn)型吧.