求阶乘问题c语言编程,求阶乘问题

首先,我们先来看这个

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编辑过]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值