假设环境不允许存储 64 位整数(有符号或无符号)。
示例输入: 示例1:输入:x = 123 输出:321示例2:
输入:x = -123 输出:-321示例3:
输入:x = 120 输出:21示例4:
输入:x = 0 输出:0提示:
- -2^31 <= x <= 2^31 - 1
首先,需要确定输入整型数的符号(正或者负);接下来需要确定这个数字反转后的大小是否超出了32位无符号整型数的范围。需要注意的是,这道题给了前提是环境不允许存储 64 位整数(有符号或无符号),那么最好不要使用到long long这一类的数据类型。
解法1 确定好符号之后,可以使用循环的方式,每次获取末尾的一位数字,来存储新的数字。同时进行判断:新的数字大小是否在INT_MIN/10到INT_MAX/10的范围内,如果超出这个范围就返回0,如果没有就继续循环直到所有的数字都被反转。
解法2 利用c++的异常处理机制,先使用to_string将整型数转换为字符串,再使用std中的reverse函数把字符串反转,最后把反转的字符串转换回整型数,在这个过程中,一旦出现了数据溢出,那么就会抛出异常,使用catch来返回0即可。
代码: 算法1:class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
};
算法2
#include
class Solution {
public:
int reverse(int x) {
int sign=x>=0?1:-1;
string s=to_string(x);
int ans=0;
try
{
std::reverse(s.begin(),s.end());
ans=stoi(s);
}catch(exception e)
{
return 0;
}
return ans*sign;
}
};



