给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [?231, 231 ? 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer
思路1: 直接将整数转为字符串,将字符串进行反转,使用try catch捕获异常,因为是32位的,所以在字符串转为数字时一定会有异常,当溢出的时候返回0,否则将根据输入的X的正负输出结果值。代码:
class Solution {
public:
int reverse(int x) {
string s = to_string(x);
int num;
std::reverse(s.begin(), s.end());
try{
num = stoi(s);
}catch(...)
{
num = 0;
}
if(x < 0)
{
num = -num;
}
return num;
}
};
思路2(竟然是0ms…): 用long存储数字,除留取余法,如果得到的数值强制转换为int后不相等,则说明溢出了int的范围,返回0,否则,返回强制类型转换后的int;代码:
class Solution {
public:
int reverse(int x) {
long ans = 0;
while(x != 0)
{
ans = ans * 10 + x%10;
x /= 10;
}
if(int(ans) != ans)
{
return 0;
}else
{
return (int)ans;
}
}
};
|