gpt4 book ai didi

c++ - 在 leetcode 中反转整数

转载 作者:行者123 更新时间:2023-11-30 03:34:53 25 4
gpt4 key购买 nike

我试图解决反向整数问题,我们必须记住处理溢出的问题。

阅读别人的解决方案并尝试,我写了我的解决方案

class Solution {
public:
int reverse(int x) {
int result = 0;
int old_result = 0;
while(x) {
old_result = result;
result = result*10 + x%10;
if ((result-old_result*10)!=x%10)
return 0;
x = x/10;
}
return result;
}
};

并且由于没有处理好溢出,所以没有被采纳。原来变了

if ((result-old_result*10)!=x%10)

if ((result-x%10)/10!=old_result)

会让事情顺利进行。

我觉得这些行在做同样的检查。不知道为什么一个通过而一个失败。

谁能帮忙解释一下?

最佳答案

I feel these lines are doing the same check. Not sure why one passes and one fails.

不一定。如果 old_result 的值曾经超过(或等于)std::numeric_limits<int>::max () / 10 + 1 , 表达式 old_result*10会溢出,这会给你错误的答案。

整数类型的溢出是未定义的行为。这是完全来自 C++ (C++11/C++14/C++17) 的标准草案(我无法访问标准的完整版本,而且在大多数情况下,它已经足够好了) :

If during the evaluation of an expression, the result is not mathematically defined or not in the range of representable values for its type, the behavior is undefined.

if 的第二种形式(重新排序)删除乘法 - 有效地增加值的范围,可以在 old_result 中使用.

关于c++ - 在 leetcode 中反转整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com