C语言 编程计算1!+2!+3!+…+20!。出现的问题

2024-11-27 21:42:11
推荐回答(5个)
回答1:

printf("1!+2!+....+20!=%ld\n",t);

%ld 是以双精度浮点型输出, 不知道你是否为你的笔误,输出的应该是  s 吧.

用断点调试可以看到: 在进行第14次运算的时候,s的值已经为负,说明s的值已经超越了long的最大值,

而你输出的是 t ,表面上看n=19时输出的是正值,好像是正确的,其实 t 的值在第17次运算时已经不正确了.

回答2:

计算结果溢出了,20! = 2432902008176640000 ,超过了long能表示的最大值。
老师让你们计算20!,就是想让你们体验一下溢出的结果。
在累乘的过程中,如果乘到二进制最高位(符号位)为1的时候,就成了负数了。

回答3:

#include
void main()
{
long t=1,s=0;
int n;
for(n=1;n<=20;n++)
{
t*=n;
printf("%d:\t%d\n",n,t);//其实数据早就溢出了
s+=t;
}
printf("1!+2!+....+20!=%ld\n",s);//怎么输出的是t
}

回答4:

float类型的数据范围比long的大。。。

回答5:

printf("1!+2!+....+20!=%ld\n",t);
把t换成s试试呢???