题目描述:
给你一个 32 位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31-1]
,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123 输出:321
示例 2:
输入:x = -123 输出:-321
示例 3:
输入:x = 120 输出:21
示例 4:
输入:x = 0 输出:0
首先定义n来记录x,标志位flag记录x是否为负数,sum记录反转后的数,定义一个min为INT32_MIN,一个max为INT32_MAX/10,INT32_MIN和INT32_MAX在标准C语言的<stdint.h>头文件中,分别代表int型的最小值和最大值。如果x==min,直接返回0即可。按照下面代码进行反转n并记录到sum中,因为INT32_MAX为2,147,483,647,此时我们取其前九位为max,判断sum是否大于max,若大于则返回0;若等于则判断下一位n是否大于7,大于7则返回0。
代码如下:
int reverse(int x)
{
int n = 0,sum = 0;
bool flag = false;
int min = INT32_MIN;
int max = INT32_MAX/10;
if(x == min) return 0;
if(x < 0)
{
n = -x;
flag = true;
}
else n = x;
while(n)
{
if(sum > max) return 0;
if(sum == max && n > 7) return 0;
sum = sum*10 + n%10;
n /= 10;
}
if(flag)
{
sum = -sum;
}
return sum;
}