C++中1*2*3*……20 这样写为什么错了?

来源:百度知道 编辑:UC知道 时间:2024/09/28 10:02:13
#include"iostream.h"
int main()
{
int sum=1;
for(int i=1;i<=20;i=i+1)
{
sum=sum*i;
}
cout<<sum<<endl;
return 0;
}

我这样写结果是-210…… 反正就是错的,为什么呢?
1楼不行,2楼的 long long 哪有这种啊,这样输有error 改成long还是这样,解决不了问题。
3楼也是不行,2个error还是 long long的问题,真有这个东西么?
'long' followed by 'long' is illegal

再弱弱的问下,各位高手的VC++6.0是不是都用的正版啊?如果有好的破解版麻烦不吝分享下哈、我的是迅雷下的397M的,貌似有阉割的嫌疑哦

因为20!(20的阶乘)大于maxlongint(32位有符号整数最大值),所以导致了高位填充,而在有符号整数中,高位代表符号,所以当然会出错,程序改成这样:
#include"iostream.h"
int main()
{
long long sum=1;//超长整型,64位整数
for(long long i=1;i<=20;i=i+1)
{
sum=sum*i;
}
cout<<sum<<endl;
return 0;
}

-----------------------------

补充:
LZ我认为你的编译器有问题啊!
long long是个很重要的类型啊!
如果不行改成__int64试试(注意:有2个下划线_)

i=i+1改成 i=i++试试

楼上的,我补充,long long 类型是 ISO C++ 里面的标准类型,8字节的长整型,在某些 C/C++ 编译器中也许不支持,建议你使用 G++/C++ 编译器,例如选择下载 DevC++(迅雷可以搜到)来试试,一定可以的。。

很明显,溢出了。。
因为 int 类型的最大值是 2^31,是小于 20 的阶乘的。
将数据类型换成 long long 的话刚好够吧。。

#include<iostream>
using namespace std;
int main()
{
long long sum=1;
for(long long i=1;i<=20;i=i+1)
{
sum=sum*i;
}
cout<<sum<<endl;
system("pause");
return 0;
}

你可以尝试用网上很容易找到的“大数模板”来计算,可以算到很高的位数。<