题目描述:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例: 输入:x = 123 输出:321 输入:x = -123 输出:-321
解题思路:看到这个题,我们可以先将数字进行反转,反转很好实现,每次取余就可以,如下图进行分析:
如果不考虑溢出的问题,这个题是很容易就解出来的,但是由于考虑溢出问题,那么在最后,我们要将反转之后的结果进行判断,判断结果是否大于INT_MAX或者小于INT_MIN。如果结果满足此条件,则返回0,否则返回结果本值。
接下来我们代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int reverse(int x) {
long long tmp = 0;
while (x != 0)
{
tmp = tmp * 10 + x % 10;
x = x / 10;
}
return tmp > INT_MAX || tmp < INT_MIN ? 0 : tmp;
}
int main()
{
int ret = reverse(123);
cout << ret << endl;
system("pause");
return 0;
}
结果显示如下: