#include <stdio.h>
void main()
{ int t=0,s=1,m,n;
for(m=1;m<=20;m++)
{
for(n=1;n<=40;n=n+2)
s=s*n;
t=t+s;
}
printf("t=%d\n",t);
}
一般有符号int型常量占两个字节,取值范围0~65535,明显t值超过了最大限度,应该定义为long int型
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-03-26
s永远是n
t永远是n(因为t=0)
t永远是n(因为t=0)
第2个回答 2011-03-26
因为你的计算结果溢出了,也就是说你的t计算出来以后很大很大,以至于都没有一种数据类型可以存储,所以结果会是负数。解决的办法是:你可以用一个数组来存放计算结果的“每一位”
例如:假设123已经很大了,那么解决的思想就是:int num[3]; 让num[0] = 1; num[1] = 2; num[3] = 3; 而不是直接定义一个 int i ; 然后把123赋给i 。 这个问题其实就是计算100的阶乘的思想
例如:假设123已经很大了,那么解决的思想就是:int num[3]; 让num[0] = 1; num[1] = 2; num[3] = 3; 而不是直接定义一个 int i ; 然后把123赋给i 。 这个问题其实就是计算100的阶乘的思想
第3个回答 2011-03-26
结果t数值太大,溢出了,int最大是范围是—32768——32767,吧int改为unsigned long 也不行,还是太小,总之 ,结果太大,放不下了
第4个回答 2019-09-03
实际情况不是输入负数程序不能运行,而是输入负数不做任何处理,要求你继续输入,直到输入10个正数后,才能打印出信息来,你可以在scanf之间增加printf("b:
");来实际测试一下
");来实际测试一下