整数反转--注意越界

一、问题描述

给定一个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;
}
 

猜你喜欢

转载自blog.csdn.net/liumoude6/article/details/81190334