|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 问个循环问题 老溢出是怎么回事?
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1957
人关注过本帖
标题:
问个循环问题 老溢出是怎么回事?
只看楼主
加入收藏
kissyoume
等 级:
新手上路
帖 子:17
专家分:0
注 册:2008-8-1
结帖率:
0
楼主
收藏
问题点数:0 回复次数:13
问个循环问题 老溢出是怎么回事?
求E=1+1/1!+1/2!+1/3!+1/N!
用for 循环 输出前50项
main()
{ double s,a,n,b,c,i;
clrscr();
s=1.0,a=1.0,b=1.0;
for(n=1.0;n<=49;N++)
{
for(i=1.0;i<=n;i++)
{b=b*i;}
c=a/b;s=s+c;
}
printf("s=%f\n",s);
}
我用的是TC 怎么算结果overflow大家帮帮忙
搜索更多相关主题的帖子:
double
2008-08-28 19:02
举报帖子
使用道具
赠送鲜花
flyue
来 自:江南西道
等 级:
贵宾
威 望:
19
帖 子:3465
专家分:1563
注 册:2006-6-20
第
2
楼
收藏
得分:0
for(n=1.0;n<=49;
N
++)?
天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-08-28 19:12
举报帖子
使用道具
赠送鲜花
flyue
来 自:江南西道
等 级:
贵宾
威 望:
19
帖 子:3465
专家分:1563
注 册:2006-6-20
第
3
楼
收藏
得分:0
我用VC编译完全没问题。或许是TC不支持太大的数据的缘故吧
(PS:你的代码书写风格很烂)
#include
<stdio.h>
void
main()
{
double
s, a, n, b, c, i;
s = 1.0, a = 1.0, b = 1.0;
for
(n = 1.0; n <= 49; n++)
{
for
(i = 1.0; i <= n; i++)
{
b = b * i;
}
c = a / b;
s = s + c;
}
printf(
"s=%f\n"
, s);
}
[color=white]
[[it] 本帖最后由 flyue 于 2008-8-28 19:16 编辑 [/it]]
天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-08-28 19:13
举报帖子
使用道具
赠送鲜花
smltq
等 级:
侠之大者
威 望:
8
帖 子:566
专家分:400
注 册:2008-1-21
第
4
楼
收藏
得分:0
tc的double放得上50!吗`````
2008-08-28 19:47
举报帖子
使用道具
赠送鲜花
似水如风
等 级:
新手上路
帖 子:25
专家分:0
注 册:2008-8-24
第
5
楼
收藏
得分:0
你的程序错误太多,建议好好改改。
2008-08-28 20:45
举报帖子
使用道具
赠送鲜花
忆馨亦伊
等 级:
新手上路
帖 子:27
专家分:0
注 册:2008-8-26
第
6
楼
收藏
得分:0
有这样一个求n!的方法可是我对pnext()函数不懂啊,请高手指点下
/*
本程序对给定的n(n<=100),计算出输出k!(k=1,2,...,n)的全部有效数字,因k!的值可能很大,故采用一维数组存储计算结果。设数组的每个元素存储k!的一位数字,并约定从低位到高位依次存于数组的第一个位置,第二个位置···。
程序中,计算k!采用对已求得的(k-1)!的结果连续加k-1次后求出,例如,4!=24,则计算5!对原来的24累加4次后得到120。为了控制累加的位数,另引入整型变量c用于记录当前(k-1)!的位数。
*/
#include
<stdio.h>
#define
MAXN
1000
int
a[MAXN],
b[MAXN];
void
pnext(int
k,
int
*cp)
{
int
c
=
*cp,
i,
m,
r;
for
(i
=
0;
i
<
c;
i++)
b[i]
=
a[i];
a[c]
=
0;
for
(m
=
1;
m
<
k;
m++)
for
(i
=
0;
i
<
c;
i++)
{
r
=
a[i]
+
b[i];
a[i]
=
r
%
10;
a[i
+
1]
+=
r
/
10;
}
r
=
a[c];
while
(r
>
0)
{
a[c++]
=
r
%
10;
r
=
r
/
10;
}
*cp
=
c;
}
void
write(int
*a,
int
k,
int
c)
{
int
i;
printf("%4d!
=
",
k);
for
(i
=
c
-
1;
i
>=
0;
i--)
printf("%d",
a[i]);
printf("\n\n");
}
main()
{
int
n,
c,
k;
printf("Enter
the
number
n(<=100):");
scanf("%d",
&n);
a[0]
=
1;
c
=
1;
write(a,
1,
c);
for
(k
=
2;
k
<=
n;
k++)
{
pnext(k,
&c);
write(a,
k,
c);
getchar();
}
}
2008-08-28 21:46
举报帖子
使用道具
赠送鲜花
zhf63
等 级:
新手上路
帖 子:6
专家分:0
注 册:2008-8-26
第
7
楼
收藏
得分:0
main()
{ double s,a,n,b,c,i;
clrscr();
s=1.0,a=1.0,b=1.0;
for(n=1.0;n<=49;N++)
{//这里应该使b重新赋值为1.0
b=1.0;
for(i=1.0;i<=n;i++)
{b=b*i;}
c=a/b;s=s+c;
}
printf("s=%f\n",s);
}
另外写程序时要注意一下格式。
2008-08-29 11:26
举报帖子
使用道具
赠送鲜花
hoodlum1980
来 自:浙江大学
等 级:
论坛游民
威 望:
2
帖 子:289
专家分:23
注 册:2008-2-24
第
8
楼
收藏
得分:0
for(i=1.0;i<=n;i++)
{b=b*i;}
你这里面肯定要溢出的,要知道n!的渐近阶是非常高的。这种题目一般都是考大数算法,而不是直接用内置数据类型算。
2008-08-29 11:37
举报帖子
使用道具
赠送鲜花
p1s
等 级:
贵宾
威 望:
10
帖 子:454
专家分:3
注 册:2005-11-4
第
9
楼
收藏
得分:0
1、对于项数不是很多的,可以用除法来做,避免用乘法发生溢出。
2、对于项数很多的,要么用大数的方法做,要么用高精度的方法做。大数做乘法,高精度做除法。
对于1的程序代码:
#include <stdio.h>
int main()
{
int i,j;
double s=1.0,a=1.0;
printf("Please input i:\n");
scanf("%d",&i);
for (j=1;j<=i;j++)
{
s=s+a/j;
a=a/j;
}
printf("sum=%.20f\n",s);
return 0;
}
.cn" target="_blank">《易学C++》,初学者学习C++的最佳读本。
2008-08-29 15:27
举报帖子
使用道具
赠送鲜花
似水如风
等 级:
新手上路
帖 子:25
专家分:0
注 册:2008-8-24
第
10
楼
收藏
得分:0
回复 8# hoodlum1980 的帖子
50!对于double来说不会溢出。
2008-08-30 21:41
举报帖子
使用道具
赠送鲜花
14
1/2页
1
2
快速回复:
问个循环问题 老溢出是怎么回事?
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.061646 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved