24小时热门版块排行榜    

查看: 827  |  回复: 7

小muer

金虫 (正式写手)

[求助] 看看这个程序那里不行。。

#include
using namespace std;
int main()
{int i=1,x,n=2,sum=0;
while(n<=20)
{sum=sum+i;
i=i*n;
n++;
}
cout<<"sum="< return 0;
}
输出结果居然为负数了。。。奇了。。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖


感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2013-03-26 22:37:10
正数溢出了就变负数了,把sum定义为long long试试
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2013-03-26 20:51:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小muer

金虫 (正式写手)

引用回帖:
2楼: Originally posted by libralibra at 2013-03-26 20:51:02
正数溢出了就变负数了,把sum定义为long long试试

有道理。。。

[ 发自手机版 http://muchong.com/3g ]
3楼2013-03-26 21:04:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小muer

金虫 (正式写手)

引用回帖:
2楼: Originally posted by libralibra at 2013-03-26 20:51:02
正数溢出了就变负数了,把sum定义为long long试试

改了,可是还是不行。。而且不能long long 哦
4楼2013-03-26 21:20:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wy_eda

银虫 (初入文坛)

这个相当于在计算20!,结果肯定溢出了.改成long long可以,不仅是sum,i也要改.如果你的编译器不支持long long,或者你要计算更大的数,需要学习一下大数乘法的相关算法,例如:http://wenku.baidu.com/view/04fa8fbe960590c69ec376df.html
5楼2013-03-27 08:16:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lauysche

禁虫 (著名写手)

感谢参与,应助指数 +1
本帖内容被屏蔽

6楼2013-03-28 09:09:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小muer

金虫 (正式写手)

引用回帖:
6楼: Originally posted by lauysche at 2013-03-28 09:09:13
20的阶乘大约为2.4329e+18,所以,对于一般的程序早就越界溢出了,不管是int longlong 还是BigInt,采用大数相乘的思路仅可以算作是能显示吧,我觉得没有必要

那要怎么办呢?

[ 发自手机版 http://muchong.com/3g ]
7楼2013-03-28 09:19:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lauysche

禁虫 (著名写手)

本帖内容被屏蔽

8楼2013-03-28 13:24:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 小muer 的主题更新
信息提示
请填处理意见