为什么C语言算出来是负数?大神们帮忙检查一下吧

2025-06-21 16:39:22
推荐回答(2个)
回答1:

一般情况下,int都差不多是4个字节的,也就是说最大能放的数是2的32次方,当你要存放的数据大于这个结果时,系统就会将高位舍弃,也就是常说的数据溢出,而你的m要存放的是17的阶乘,已经远大于该数据了,因此出错也是难免的了!
希望可以帮到你,本人知道的不多,如果说法有误的话请指正!

回答2:

是因为s的值已经超出整数的表示范围了
for(n=2;n<=16;n=n+2)
m=m*(n+1)*(n+2);
s=m+s;
是想写成这样吗
for(n=2;n<=16;n=n+2)
{
m=m*(n+1)*(n+2);
s=m+s;
}