32ビット符号付き整数を与え、あなたはそれぞれ逆に、この整数値を必要とします。
例1:
入力:123
出力:321
例2:
入力:-123
出力:-321
例3:
入力:120
出力:21
注:
我々は、32ビット符号付き整数、[-231 231--1]の[値の範囲を格納することができる環境があると仮定します。整数オーバーフローの後、それは0を返し、逆ならば、この仮説によるとしてください。
図1は、反転文字列
文字列にxは、整数の文字列は、その後、戻り反転、および。
class Solution {
public:
int reverse(int x) {
if (x == INT_MIN) {
return 0;
}
if (x < 0) {
return -reverse(-x);
}
long res = 0;
string str = std::to_string(x);
string res_str;
for (int i = str.size() - 1; i >= 0; --i) {
res_str.push_back(str[i]);
}
res = std::atoi(res_str.c_str());
if (res > INT_MAX) {
return 0;
}
return res;
}
};
図2に示すように、数学的な方法は、
位置を取り、その後、RESに* 10 +ビット。
class Solution {
public:
int reverse(int x) {
if (x == INT_MIN) {
return 0;
}
if (x < 0) {
return -reverse(-x);
}
long res = 0;
while (x > 0) {
int e = x % 10;
x /= 10;
res = res * 10 + e;
}
if (res > INT_MAX) {
return 0;
}
return res;
}
};
// 下面是评论中的方法
int reverse(int x)
{
int max = 0x7fffffff, min = 0x80000000;//int的最大值最小值
long rs = 0;//用long类型判断溢出
for(;x;rs = rs*10+x%10,x/=10);//逆序,正负通吃,不用单独考虑负值
return rs>max||rs<min?0:rs;//超了最大值低于最小值就返回0
}