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的,貌似有阉割的嫌疑哦
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;
}
你可以尝试用网上很容易找到的“大数模板”来计算,可以算到很高的位数。<
c语言中 一个函数这样写是什么意思
在c语言中怎么写这样的字符到文件中去?
在ABC中,角A,B,C所对的边分别为a,b,c,已知a=2,c=3,cosB=1/4,
计算1!+2!+3!+4!+5!+6!+……20!用单循环计算,要怎么写?(C语言)
有一杯水质量为300g,初温为80`C,在20`C的室温中每隔1min要下降1`C,
在三角形ABC中,三边a、b、c与面积S的关系式为S=1/4(a^2+b^2-c^2),则角C为?
已知三角形ABC中,A(2,1)B(3,-2),C(-3,1)BC边上的高为AD,
四五六七……日语中是否可以直接这样写?
a,b,c,d为正数,证明:(1)a+b<c+d (2)(a+b)(c+d)<ab+cd(3)(a+b)cd<ab(c+d)中至少有一个不成立
用C写这样一段程序