返回信息流#include<iostream>
using namespace std;
int main() {
long long num = 655360 * 655360;
cout << num << endl;
return 0;
}
655360的平方值大概为4x10^11,long long类型最大能到大概10^19,感觉long long类型足够能储存655360的平方。但执行上面代码输出值为0产生了溢出?求大神指点
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #92812同步于 2017/4/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【问题】乘法溢出求解
Starsunny
2017/4/7镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
你说的没错, ```long long```类型足够存储655360的平方, 你可以将代码改成如下形式:
```
#include<iostream>
using namespace std;
int main() {
long long int a = 655360;
long long int b = 655360;
long long int num = a*b;
cout << num << endl;
return 0;
}
```
原来的代码溢出是```int```类型溢出而不是```long long```类型溢出, 楼主可以自己思考一下其中的原因.
哦哦,明白了,多谢指点!
【 在 iLouis 的大作中提到: 】
: [md]
: 你说的没错, ```long long```类型足够存储655360的平方, 你可以将代码改成如下形式:
: ```
: ...................
用LL试试
【 在 iLouis 的大作中提到: 】
: 暖神好! 标准当中是否只规定了```sizeof(long) >= sizeof(int)```? 而实际上不少编译器实现中这两种类型的长度是相同的, 我测试过这种写法仍然会产生溢出, 是与编译器相关的么?
: [upload=1][/upload]