给定一个 32 位有符号整数,将整数中的数字进行反转。
示例一:
输入:123
输出:321
示例二:
输入:-123
输出:-321
示例三:
输入:120
输出:21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [-2^31, 2^31 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
Solution:
这个问题其实比较简单,先将int数字转为字符串,再反向计算每位的数值,将每次的计算结果相加。记得边界问题,输入的值一定是在[-2^31, 2^31 − 1]内,
颠倒后的整数就不一定了。因此我使用long long类型存储颠倒后的整数结果,输出是再判断有没有溢出。
class Solution {
public:
int reverse(int x) {
long long an = 0;
bool positive = true;
if (x < 0) {
positive = false;
x = -x;
}
string num = to_string(x);
int len = num.size();
long long a = 2;
for (int i = 0; i < 30; i++) {
a *= 2;
}
for (int i = 0; i < len; i++) {
long long temp = num[len - i - 1] - '0';
for (int j = 0; j < len - i - 1; j++) {
temp *= 10;
}
an += temp;
}
if (an >= a) return 0;
if (!positive) an = 0 - an;
return int(an);
}
};