7. Reverse Integer
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123 Output: 321
Example 2:
Input: -123 Output: -321
Example 3:
Input: 120 Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
int reverse(int x) {
char strInt[12];
sprintf(strInt,"%d",x);
int n = 0;
while(strInt[n] != '\0') n++;
for(int i = 0,j = n - 1;i < j;i++,j--){
if(strInt[i] == '-') i++;
while(strInt[j] == '0'){
strInt[j] = '\0';
j--;
}
char tmp = strInt[i];
strInt[i] = strInt[j];
strInt[j] = tmp;
}
n = atoi(strInt);
return n;
}
上面代码没有考虑内存溢出的问题,必须一位一位地转换。
int reverse(int x){
int xr = 0,n = 1,p = x;
while(p / 10){
p /= 10;
n *= 10;
}
p = 1;
while(1){
//判断是否内存溢出
if(xr != (xr + p * (x / n)) % p) return 0;
xr += p * (x / n);
x %= n;
p *= 10;
n /= 10;
if(x == 0) return xr;
}
}
自己写的太丑了,附上别人的代码:
https://www.cnblogs.com/grandyang/p/5778281.html
class Solution {
public:
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
int reverseInteger(int n) {
int res = 0;
while (n != 0) {
int t = res * 10 + n % 10;
if (t / 10 != res) return 0;
res = t;
n /= 10;
}
return res;
}
};
Email:JingwangLi@outlook.com