7.Reverse Integer (INT; Overflow)

3265 ワード

Reverse digits of an integer.
Example1: x = 123, return 321 Example2: x = -123, return -321
 
考え方:オーバーフローに注意.以下の方法では、溢れ出します.
class Solution {

public:

    int reverse(int x) {

        int ret = 0;

        while(x){

            ret = ret * 10 + x%10;

            x /= 10;

        }

        return ret;

    }

};

改善されたアプローチ:
class Solution {

public:

    int reverse(int x) {

        if (x == INT_MIN) return 0;

        

        int ret = 0;

        int digit;

        bool pos = x>=0?true:false;

        

        x = abs(x); //

        while(x){

            digit = x%10;

          

            if (ret > (INT_MAX - digit) / 10)  //10*ret+digit > INT_MAX

                return 0;

  

            ret = ret * 10 + digit;

            x /= 10;



        }

        if(pos) return ret;

        else return (-ret);



    }

};