Reverse Integer

反转整数

给定一个 32 位有符号整数,将整数中的数字进行反转。 32 位有符号整数,其数值范围是 [−231,  231 − 1],c语言的宏定义有INT_MAX和INT_MIN,如果反转后的整数溢出,则返回 0。

int reverse(int x)
{
    
}

 

测试用例:

输入: 123
输出: 321

输入: -123
输出: -321

输入: 120
输出: 21

输入: 1234567899
输出: 0

 

解法:

int reverse(int x) 
{
    //对边界条件先进行处理 便于后面的编码
    if (x == 0)
    {
        return 0;
    }

    //首先对x进行处理 负数当作正数进行处理方便
    int flash = 0;
    if (x < 0)
    {
        flash = 1;
        x = -x;
    }

    //将整数x转换成字符串进行处理 主要是方便
    char str[128] = { 0 };
    sprintf(str, "%d", x);

    //反转的时候 比如120反转后应该是21 所以要把末尾的0去掉
    int len = strlen(str);
    int i = len - 1;
    while (str[i] == '0')
    {
        //str[i] = '\0';
        i--;
    }

    //将原来的低位数字作为高位
    //使用long来保存可能溢出的结果,再与最大/最小整数相比较
    long res = 0;
    while (i >= 0)
    {
        res *= 10;
        res += str[i] - '0';
        i--;
    }

    //如果x本来是负数,返回的时候也应该是负数
    if (flash != 0)
    {
        res = -res;
    }
    
    //这里用来判断溢出 对溢出进行处理
    if (res > INT32_MAX || res < INT32_MIN)
    {
        res = 0;
    }

    return res;
}

 

 

 

https://leetcode-cn.com/problems/reverse-integer/description/

posted @ 2018-04-13 23:54  hanhuihanhui  阅读(119)  评论(0)    收藏  举报