Question:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.
Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?
For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
首先问题意思是给出一个数,然后返回这个数的倒转的值。然后给了提示,假如给出的数末尾是0,那么倒转之后就要去掉这一位,而且这个数是有符号整数,需要主要倒转过来之后会溢出。
对于这一类倒转的题,可以用string库函数和stringstream库中的函数进行操作。但是我这里用的是对给出的数进行逐个末位取数(%10),初始化为0,然后每次循环*10, 相加就可以得到翻转后的对应的镜像位置。
hints:1.可以在climits库用找到int值的最大最小值,为INT_MAX和INT_MIN。
2.可以设翻转后的数的long型,这样就不会导致翻转后溢出而判断错误。
Code:
#include <climits>
class Solution {
public:
int reverse(int x) {
long num = 0;
while (x != 0) {
num = num * 10 + x % 10;
x /= 10;
if (num > INT_MAX || num < INT_MIN) {
return 0;
}
}
return (int) num;
}
};