重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
求阶乘没必要弄这么复杂,你非要用递归算法求阶乘也行,问题出在输入负数时,要有c语言终止程序的代码。
桂林网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联公司从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
这段代码就是:exit(-1);
修改源程序
得到正确结果
在整数表示范围内得到正确结果
不过源程序还是有问题,如果阶乘的最终结果数值非常大时,超出int的表示范围,就会出错。
超出整数表示范围得到错误结果
这就需要修改数据类型int为double,这里给出更简单的代码:
得到正确的运行结果:
修改数据类型可得到正确的结果
可能是超出了整数所能表达的范围。因为通常整数的范围是-32768~32767。建议你把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!。
你计算100!呀,int存不下的,这个结果太大了,溢出了,所以可能会出现结果为负数,哪怕不是负数结果也不是正确的。
20的阶乘是一个很大很大的数,你定义一个int型变量是不够的,溢出了,用浮点型吧.