题目描述:
给你一个 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
这题很简单,解决方法很多,基本步骤为:
1、判断正负;
2、翻转整数;
3、判断尾数0;
4、是否越界。
这些完全可以靠求余获取尾数解决,但完全可以靠库函数解决解没必要自己写代码了。
这里主要是靠string::assign()翻转整数(当然用reverse也可以,只不过注意类内方法名,记得加上std::前缀);
然后通过stoi()将字符串转为int的功能实现第3第4问题。
在这里是利用了如果stoi()返回的数在int定义域范围外会返回runtime_error的特性,在溢出时用try-catch捕捉这个返回错误从而决定返回的答案。
注:
若使用atoi(),则在超出范围时只会返回int的上下界。
代码:
class solution
{
public:
int reverse(int x)
{
string s = to_string(x);
string flag = "";
string ans = "";
if(s[0]=='-')
{
flag = "-";
ans = s.substr(1, s.length() - 1);
}
else
{
ans = s;
}
ans.assign(ans.rbegin(), ans.rend());
ans = flag + ans;
try
{
cout << stoi(ans) << endl;
}
catch (exception &e)
{
cout << 0 << endl;
}
}
};