【leetcode】Reverse Integer(middle)☆

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

 

总结:处理整数溢出的方法

①用数据类型转换long  或 long long

②在每次循环时先保存下数字变化之前的值,处理后单步恢复看是否相等 (比③好)

③整体恢复,看数字是否相等。

 

思路:注意30000这样以0结尾的数字,注意越界时返回0.

我检查越界是通过把翻转的数字再翻转回去,看是否相等。

int reverse(int x) {
        int xx = abs(x); 
        int ans = 0;
        int zeros = 1; //如果x = 2000 这种后面有很多0 那翻转后是2 再翻转还是2 需要乘以1000才能恢复成2000

        while(xx != 0)
        {
            int r = xx % 10;
            xx /= 10;
            ans = ans * 10 + r;
            if(ans == 0) zeros *= 10;
        }
        ans = (x < 0) ? -ans : ans;
        
        //检测是否溢出 思路把数字重新翻转回去,看结果是否相同
        int anss = abs(ans), check = 0;
        while(anss != 0)
        {
            int r = anss % 10;
            anss /= 10;
            check = check * 10 + r;
        }
        check = (x < 0) ? -check : check;
        check *= zeros;

        if(check != x) //溢出了
            return 0;
        else
            return ans;
    }

 

基于②的判断:

public int reverse(int x)
{
    int result = 0;

    while (x != 0)
    {
        int tail = x % 10;
        int newResult = result * 10 + tail;
        if ((newResult - tail) / 10 != result)
        { return 0; }
        result = newResult;
        x = x / 10;
    }

    return result;
}

 

基于①的判断:

int reverse(int x) {
        long num = abs((long)x);
        long new_num = 0;
        while(num) {
            new_num = new_num*10 + num%10;
            num /= 10;
        }

        if (new_num > INT_MAX) {
            return 0;
        }
        return (x<0 ? -1*new_num : new_num);
    }

 

posted @ 2015-04-15 21:37  匡子语  阅读(221)  评论(0编辑  收藏  举报