2 rl529014 rl529014 于 2016.02.24 11:36 提问

关于C++中的long long 类型的问题,大神菜鸟都请看一下,谢谢咯,感激不尽

我要求一个大数的立方数,所以两个不同的程序如下:
图片说明
图片说明
把三个数直接相乘得到的结果时错误,请各位大神解释一下为什么会出现这样的现象呢?麻烦各位了。

2个回答

leilba
leilba   Rxr 2016.02.24 11:54
已采纳

3751*3751*3751,这个操作实际上系统在处理的时候默认是int的操作,int是32位的,其取值范围-2147483648~2147483647,也就是说根本放不下结果,所以给出的答案是错误的。
你改成下面这种就对了:

 #include "iostream"
using namespace std;
int main() {
    long long a = 3751;
    cout<<a*a*a<<endl;

}

而 pow的话是系统函数,会用double来进行运算,double有64位,完全可以放下结果,所以运算的结果是正确的。

rl529014
rl529014 恩恩,谢谢你,我明白了
接近 2 年之前 回复
qq423399099
qq423399099   Ds   Rxr 2016.02.24 12:01

lng = 3751*3751*3751;由于默认是按int处理的
它会先计算出3751*3751*3751的结果并且赋给一个系统临时开辟的int变量(之后才会再把这个变量的值赋给lng,这里是分两步的)
但此时已经超过上限,即使lng的上限够也导致计算不正确

rl529014
rl529014 恩恩,谢谢你,已经懂了
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!