【发布时间】:2022-11-05 02:54:29
【问题描述】:
我尝试解决这个问题: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.) 那么为什么会出现这个错误,我该如何解决呢? 谢谢
【问题讨论】:
-
int 在 java 中是 32 位,在 C++ 中它是平台定义的(可能只有 16 位)。尝试将 int rev 转换为
long rev
标签: java c++ palindrome