【C语言】有没有大佬知道这个程序为什么会输出一个负数?

我自己瞎写的程序,刚学没多久,这个程序目的是输出1-100的奇数的乘积,咋会冒出来个负数呢?
#include<stdio.h>
main()
{
long i;
i=chengji ();
printf("%ld", i);}

long chengji (){
long a,b=1;
for (a=1;a<=100;a+=2)
b*=a;
return b ;}

程序会输出负数的原因是,在这个程序中你没有对每次运算的结果进行检查,因此当乘积超出了long类型的最大值时,就会产生溢出,导致结果为负数。
为了避免这个问题,你可以在每次运算后检查结果是否已经超出了long类型的范围,并在必要时退出循环。可以这样改:
#include<stdio.h>
main()
{
long i;
i=chengji();
printf("%ld", i);
}
long chengji () {
long a, b=1;
for (a=1; a<=100; a+=2)
{
if (b > LONG_MAX/a) break;
b *= a;
}
return b;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-12
这个乘积太大了(甚至都不能用天文数字来形容),long类型已远远不足于容纳这个数,你可以把范围缩小到1-30再试试,或者改用double类型(但最终显示结果是个约数,不是准确数,而且表示方式是科学计数法)本回答被提问者和网友采纳
相似回答