我要求一个大数的立方数,所以两个不同的程序如下:
把三个数直接相乘得到的结果时错误,请各位大神解释一下为什么会出现这样的现象呢?麻烦各位了。
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位,完全可以放下结果,所以运算的结果是正确的。
lng = 3751*3751*3751;由于默认是按int处理的
它会先计算出3751*3751*3751的结果并且赋给一个系统临时开辟的int变量(之后才会再把这个变量的值赋给lng,这里是分两步的)
但此时已经超过上限,即使lng的上限够也导致计算不正确