| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2566 人关注过本帖
标题:求阶乘问题
只看楼主 加入收藏
水汀飘落
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-7-22
收藏
 问题点数:0 回复次数:10 
求阶乘问题

#include <stdio.h> main() { int s=1,i; printf("输入一个数:"); scanf("%d",&i); while (i>0) { s=s*i; i++; } printf("%d!=%d\n",i,s); }

我这个是输入一个数。然后求它的阶乘。为何报错误。谢谢指教。

搜索更多相关主题的帖子: 阶乘 
2004-07-23 00:24
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

#include <stdio.h> main() { int s=1,i,i1=1; printf("输入一个数:"); scanf("%d",&i);

while (i1<=i) { s=s*i1; i1++; } printf("%d!=%d\n",i,s); }


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-07-23 00:30
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
#include &lt;stdio.h&gt;
main()
{
int s=1,i,i1;
printf("输入一个数:");
scanf("%d",&amp;i);
i1=i;
    while (i&gt;0)
{
  s=s*i;
      i--;
}
printf("%d!=%d\n",i1,s);
}

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-07-23 00:31
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

#include <stdio.h> main() { int s=1,i=1,i1; printf("输入一个数:"); scanf("%d",&i1);

while (i<=i1) { s=s*i; i++; } printf("%d!=%d\n",i1,s); }


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-07-23 00:32
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

首先,我们先来看这个

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


淘宝杜琨
2004-07-23 02:29
hu_sir
Rank: 1
等 级:新手上路
帖 子:208
专家分:0
注 册:2004-4-29
收藏
得分:0 

status fun(int n,int &s)

{if(n==1) *s=1;

else *s=n*fun(n-1,&s);

return OK;

}

2004-07-23 09:21
碎方脸
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2004-7-24
收藏
得分:0 
还是用函数简单
2004-07-24 20:31
阿一2004
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2004-7-24
收藏
得分:0 

再次看到神为我们解题,再次受教,

再次感谢,再次鼓掌外加热烈。

2004-07-26 17:43
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

其实还有很多人在解答啊,斑竹,knocker也来了,只不过我和新手比较接近,毕竟我也是刚刚学的,你就觉得我说得好理解。

其实他们才是很厉害的,特别是knocker,隐藏的BOSS啊


淘宝杜琨
2004-07-26 19:42
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

阶乘问题光用整型是、不完善的,很快回溢出……

大家可以试试用数组做以下,顺便提高


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-26 20:02
快速回复:求阶乘问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034338 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved