一、问题描述
给定一个32位有符号整数,将整数的数字反转。
【举例】
<例 1>
Input: 123
Output: 321
<例 2>
Input: -123
Output: -321
<例 3>
Input: 120
Output: 21
二、问题分析
此类问题要考虑三点:
1)正整数 -- 个位为0或非0
2)负整数 -- 个位为0或非0
3)越界 -- INT_MIN / INT_MAX
三、算法解答
/********************************************************
author:tmw
date:2018-6-12
*********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int reverse(int x)
{
int reverse_x = 0;
int temp;
while(abs(x)>0)
{
temp = reverse_x;
/**判断是否越界**/
//正数是否越界
if( temp>0 && ( (temp == INT_MAX/10 && x%10 > INT_MAX%10) || temp > INT_MAX/10 ) )
return 0;
//负数是否越界
if( temp<0 && ( (temp == INT_MIN/10 && x%10 < (unsigned)INT_MIN%10) || temp < INT_MIN/10) )
return 0;
reverse_x = reverse_x*10 + x%10;
x = x/10;
}
return reverse_x;
}