题目简介:
给一个整型数,将它逆置过来:
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
思路:
- 如果该数后面是连续的0,逆置过来没有0,由于逆置之后也是数字,打印出来不会显示。
- 考虑到整型逆置溢出的问题,有符号整数的范围为-2147483648~2147483648,考虑到2000000009,逆置之后变为9000000002,已经超出范围。
自己的思路:感觉虽然做出来了,但是代码看起来不美观。
class Solution {
public:
int reverse(int x) {
bool flag = false;
//判断是否为负数
if(x < 0)
flag = true;
//如果是负数,先变为正数
if(flag)
x = 0 - x;
//考虑溢出用long来存储逆置后的数
long y = 0;
while(x > 0)
{
y = y*10 + x %10;
x /= 10;
}
//判断是否超过整型表示的最大值
if(y > INT_MAX)
return 0;
//如果X为负数,则转化为负数输出
if(flag)
y = 0 - y;
return y;
}
};
网上参考答案:比我的代码精美的多~
class Solution {
public:
int reverse(int x) {
// 先分离出x的数值部分和符号部分
int y = abs(x), z = x == y ? 1 : -1;
// 将y反向放于一个long中,这样可以避免越界
long tmp = 0;
while (y) {
tmp = tmp * 10 + y % 10;
y /= 10;
}
// 判断是否越界
if (z*tmp > INT_MAX || z*tmp < INT_MIN) return 0;
// 否则返回翻转后的值
return z*tmp;
}
};