首先,我们先来看这个
while (i>0)
{
s=s*i;
i++;
}
这个循环一直要加到 i<=0 时候,i>0为假,才停止循环...够戗的(要循环3万多次!)。这个时候的 i 早就被加得面目全非了。
所以循环的判断条件必须先要改 while(i!=0)
第二个要改的是 i++; 因为阶乘都是正数,所以 i++; 无论如何都只能得到一个正数,直到超出整形变量的范围,从-32768开始,所以,为了配合循环的判断条件,把 i++; 改为 i--;
然后再来看看这个:printf("%d!=%d\n",i,s);
首先要明确一点的是:i 的值在上面的循环中早就已经被改动了!所以这里不应该再用 i 来表示你输入的初值,你可以在循环开始之前定义一个变量,专门在这里代替 i 即可
所以整个程序应该为
#include
main()
{
int s=1,i;
printf("输入一个数:");
scanf("%d",&i);
m=i; /*令m=i,m 专门用来表示输入的初值,专款专用哦*/
while(i!=0) /*修改了循环的判断条件*/
{
s=s*i;
i--; /*为了配合循环的判断条件 i++; 改为 i--;*/
}
printf("%d!=%d\n",m,s); /*用 m 在这里来代替 i*/
}
因为我看到这个帖子的时候已经是深夜了,眼困难耐,难免有说不详细或者罗嗦的地方(甚至还有错误)请多包涵
此外,还需注意一点的是:因为s为int 型的变量,所以他的范围要比long int 小很多,在输入 i 的时候要考虑下结果 s 是不是在int 允许的范围之内
[此贴子已经被作者于2004-07-23 02:47:53编辑过]