| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1744 人关注过本帖
标题:求1!+2!+3!+4!+5!+...+20!,我错在哪里?
只看楼主 加入收藏
刹那公子
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-9-26
收藏
得分:0 

自己运行看看啊
268040729


2007-11-17 12:41
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
关于这个问题,我引申出了一个问题,实在不解~

樱花大战,  有爱.
2007-11-17 13:33
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
[CODE]

#include<iostream>
using namespace std;
int main()
{
long int k=1,j,sum=0;
for(int i=1;i<=20;i++)
{

k*=i;
printf("%ld\n",k);

}

return 0;
}


[/CODE]
分别求阶乘并输出,但是出现了负数。我想过可能是,数据溢出,但是好像又不可能.
是什么原因呢?

樱花大战,  有爱.
2007-11-17 13:34
symos
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-9-15
收藏
得分:0 
#include<iostream>
using namespace std;
是什么意思??

2007-11-17 13:43
lw_China
Rank: 1
来 自:peking
等 级:新手上路
帖 子:73
专家分:0
注 册:2007-11-4
收藏
得分:0 
以下是引用刹那公子在2007-11-17 12:34:54的发言:

其实求阶乘程序可以这样写
main()
{
int i;
long sum=0,t=1;
for (i=1;i<=20;i++)
{
t=t*i;
sum=sum+t;
}
printf("%ld",sum);
}

你算一下你的时间复杂度.O(n)吧.
其实用分治法可以到O(logn)


在这里推荐一本书 <The C Programming Language>
2007-11-17 13:49
lw_China
Rank: 1
来 自:peking
等 级:新手上路
帖 子:73
专家分:0
注 册:2007-11-4
收藏
得分:0 
以下是引用中学者在2007-11-17 13:34:56的发言:
[CODE]

#include<iostream>
using namespace std;
int main()
{
long int k=1,j,sum=0;
for(int i=1;i<=20;i++)
{

k*=i;
printf("%ld\n",k);

}

return 0;
}


[/CODE]
分别求阶乘并输出,但是出现了负数。我想过可能是,数据溢出,但是好像又不可能.
是什么原因呢?

一般long int 是32个bit ,最大支持4294967295.

图片附件: 游客没有浏览图片的权限,请 登录注册


在这里推荐一本书 <The C Programming Language>
2007-11-17 14:12
dousao
Rank: 2
等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
收藏
得分:0 

弱弱问一句
a1存的是2!
a2存的是3!
是么?


同行售各专业书籍,全1折,淘宝店:http://maishu.
2007-11-17 15:37
bogogo
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-9-18
收藏
得分:0 
你第一个for循环里应该是a[i+1]=a[i+1]*a[i];
还有就是k要是long型

偶啲世界,無魜敢宔宰偶!
2007-11-17 18:05
hanzhu3366
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:741
专家分:3
注 册:2007-10-12
收藏
得分:0 
要是 printf("%ld\n",sum); 改成printf("%d\n",sum); 的结果是 -1511 为什么???
以下是引用刹那公子在2007-11-17 12:34:54的发言:

其实求阶乘程序可以这样写
main()
{
int i;
long sum=0,t=1;
for (i=1;i<=20;i++)
{
t=t*i;
sum=sum+t;
}
printf("%ld",sum);
}


偶滴淘宝小店,主要经营女装、男装、话费充值哦http://hanzhu3366.taobao. com
2007-11-17 19:23
toms
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-9-19
收藏
得分:0 
我把程序修改了一下,让他显示每一个数的阶乘,但是到12以后的数,好多出现了负数,这是什么 原因..
[IMG]http://photo.store.qq.com/http_imgload.cgi?/rurl2=2c65be94743c3fe392a88a68c46f6c8642950ca8487e11594d52e873d0274b8664e3a1b605c8beb19f2268722c72a118d40d0d9d83bebad10cbb6af93cbc5515c43ec87a8463e12d835063c65a2832eec7febf1f[/IMG]
我改的是在for语句内加了一个printf语句显示.这样应该不会影响吧.

[此贴子已经被作者于2007-11-17 19:44:24编辑过]


2007-11-17 19:42
快速回复:求1!+2!+3!+4!+5!+...+20!,我错在哪里?
数据加载中...
 
   



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

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