我试着解决了这个问题:https://leetcode.com/problems/palindrome-number/使用代码:
class Solution {
public:
bool isPalindrome(int x) {
int rev = 0;
int temp = x;
while(temp != 0 && temp > 0){
rev = rev* 10;
rev = rev + temp%10;
temp = temp/10;
}
if (rev == x){
return true;
}
else{
return false;
}
}
};并在C++中得到了以下错误:
Line 7: Char 22: runtime error: signed integer overflow: 998765432 * 10 cannot be represented in type 'int' (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:16:22但是,逻辑上相同的代码在Java中运行得很完美。java和c++的int数据类型都在- 2^31到2^31-1之间(来源:https://www.tutorialspoint.com/cplusplus/cpp_data_types.htm,https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html#:~:text=int%3A%20By%20default%2C%20the%20int,value%20of%20232%2D1.),那么为什么会出现这个错误,我如何修复呢?谢谢
发布于 2022-05-14 14:36:16
您将得到此错误,因为9,987,654,320太大,无法容纳32位整数。
解决方案:改用long long。这就是:
long long rev = 0;
long long temp = x;此外,我建议明确指定参数x的类型。
https://stackoverflow.com/questions/72240575
复制相似问题