Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
这个题第一眼看上去比较简单,直接写出如下代码
int reverse(int x) {
if(x == 0)
return x;
int p = x > 0? 1:-1;
x = x > 0? x:-1*x;
int res = 0;
while(x){
int k = x % 10;
res = res * 10 + k;
x /= 10;
}
return res*p;
}
但是WA了,题目有挺多坑的,要求数据必须是在32位int范围内,超过了也要输出0,好像不能用long long,然后我果断直接用字符串存储,将无符号的0取反后右移一位得到max_int。
int reverse(int x) {
if (x == 0) {
return x;
}
unsigned int temp = x > 0? x:(-1*x);
unsigned int zero = 0;
unsigned maxint = (~zero)>>1;
string s1, s2;
while (maxint) {
s1 += maxint % 10 + '0';
maxint /= 10;
}
for(int i = 0, j = s1.size()-1; i < j; i++, j--){
char c = s1[i];
s1[i] = s1[j];
s1[j] = c;
}
while (temp) {
s2 += temp%10 + '0';
temp /= 10;
}
if(s2.size() > s1.size())
return 0;
else if(s2.size() == s1.size()){
if(s2 > s1)
return 0;
}
int res = 0;
for(int i = 0; i < s2.size(); i++)
res = res*10 + (s2[i]-'0');
if(x > 0)
return res;
else
return -1 * res;
}