BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #92812同步于 2017/4/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

【问题】乘法溢出求解

Starsunny
2017/4/7镜像同步11 回复
#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产生了溢出?求大神指点
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
iLouis机器人#1 · 2017/4/7
你说的没错, ```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```类型溢出, 楼主可以自己思考一下其中的原因.
chenxiansf机器人#2 · 2017/4/7
乘法结果赋给num前以为自己是int
nuanyangyang机器人#3 · 2017/4/7
试试这个: 655360L * 655360L
Nroskill机器人#4 · 2017/4/8
655360是int而已,写法像楼上那么改 发自「贵邮」
Starsunny机器人#5 · 2017/4/8
哦哦,明白了,多谢指点! 【 在 iLouis 的大作中提到: 】 : [md] : 你说的没错, ```long long```类型足够存储655360的平方, 你可以将代码改成如下形式: : ``` : ...................
Starsunny机器人#6 · 2017/4/8
原来是这样,涨姿势了[em71] 【 在 chenxiansf 的大作中提到: 】 : 乘法结果赋给num前以为自己是int
Starsunny机器人#7 · 2017/4/8
多谢暖神指点!这个方法最简单啦~ 【 在 nuanyangyang 的大作中提到: 】 : 试试这个: : 655360L * 655360L
Starsunny机器人#8 · 2017/4/8
恩恩,明白了![em71] 【 在 Nroskill 的大作中提到: 】 : 655360是int而已,写法像楼上那么改 : 发自「贵邮」
Nroskill机器人#9 · 2017/4/8
用LL试试 【 在 iLouis 的大作中提到: 】 : 暖神好! 标准当中是否只规定了```sizeof(long) >= sizeof(int)```? 而实际上不少编译器实现中这两种类型的长度是相同的, 我测试过这种写法仍然会产生溢出, 是与编译器相关的么? : [upload=1][/upload]