题目描述
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
解题思路
本题目比较简单,主要考虑三点:
- 如何将一个数字翻转->result = result * 10 + x % 10;
- 考虑负数->bool变量做标识;
- 翻转之后的数越界的话要return 0->得到的结果分别与INT_MAX和INT_MIN比较。
C++实现
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
bool flag = (x>=0)?true:false; // x为负数时flag为false
if (flag == false)
x *= -1;
long long result = 0;
while (x != 0) {
result = result * 10 + x % 10;
x /= 10;
}
if (result > INT_MAX || result < INT_MIN) {
cout << "翻转之后的数越界" << endl;
} else {
if (flag == false)
result *= -1;
cout << result << endl;
}
return 0;
}
反思与总结
题目虽然简单,但解法还可以更简单,看标答是没有格外用bool变量标识该数是正是负的,仔细想来也确实如此。而且也无须暂时用long long存储结果(这里我是怕会越界,所以先用比较大的类型来存储结果,然后再判断是否越界,显得比较啰嗦)
标答如下:
int reverse(int x) {
int res = 0;
while (x != 0) {
if (abs(res) > INT_MAX / 10) return 0;
res = res * 10 + x % 10;
x /= 10;
}
return res;
}