int —>string
s = to_string(n);
string—>int
n = stoi(s);
Input: 123
Output: 321
Input: -123
Output: -321
Input: 120
Output: 21
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
//函数名与reverse(s.begin(),s.end())同,故无法用库函数
int reverse(int x) {
bool flag = x < 0;
x = abs(x); //反转后负号会到最后面
string s = to_string(x);
//s反转,再转换成整数
long long r = 0;
for (int i = 0; i < s.size(); ++i)
{
r += pow(10,i) * (s[i]- '0'); //末尾的零加不上去,故自动去除
if (!flag && (r > 1LL * INT_MAX))
return 0;
if (flag && (r > -1LL * INT_MIN))
return 0;
}
if(flag)
r *= -1;
return r;
}
int reverse(int x) {
bool flag = x < 0;
x = abs(x);
string s = to_string(x);
//实现反转——reverse(s.begin(), s.end())
string res = "";
for (auto i = s.rbegin(); i != s.rend(); ++i) {
res += *i;
}
//res 转换成整数
long long r = 0;
for (int i = 0; i < res.size() && res[i] != 0; i++) {
r = r*10 + (res[i]- '0');
if (!flag && r > INT_MAX)
return 0;
if (flag && r > -1LL *(INT_MIN)) //不能用abs、-1替换-1LL,溢出,不守数学规则
return 0;
}
return flag ? -1 * r : r;
}
int reverse(int x) {
bool flag = x < 0;
x = abs(x);
string s = to_string(x);
string res = "";
for (auto i = s.rbegin(); i != s.rend(); ++i) {
res += *i;
}
try {
int r = stoi(res); //溢出会抛出异常
if (flag)
r = -1 * r;
return r;
} catch(exception e) {
return 0;
}
}