LeetCode逆波兰表达式求值遇int溢出错误,求技术解析
问题原因与解决方案
为什么乘法会触发溢出错误?
你遇到的是32位有符号整数溢出问题:
- 绝大多数系统里,
int是32位有符号类型,取值范围是-2^31(即-2147483648)到2^31-1(即2147483647)。 - 出错的计算式
8 * 268435456结果是2147483648,刚好比int的最大值大1,超出了int的存储范围,因此触发运行时溢出错误。
解决方案
你的初步思路完全正确:把参与计算的变量v1、v2的类型从int改为long long,或者在计算前将int值转为long long类型。
long long是64位有符号整数,取值范围可达-9×10^18到9×10^18,完全能容纳测试用例中超过10^9的数值相乘结果。- 示例修改:如果你的栈原本是
stack<int> st;,可以改成stack<long long> st;;取出元素计算时用long long接收:long long v2 = st.top(); st.pop(); long long v1 = st.top(); st.pop(); st.push(v1 * v2);
内容的提问来源于stack exchange,提问作者CloudBrain
相关产品推荐
相关产品推荐

