LeetCode_0007_整数の反転

3981 ワード

0007整数反転
タイトルリンク:https://leetcode-cn.com/problems/reverse-integer/
32ビットのシンボル付き整数を与えます.この整数の各ビットの数字を反転する必要があります.
例1:
入力:123出力:321
例2:
入力:-123出力:-321
例3:
入力:120出力:21
注意:
我々の環境では32ビットの符号付き整数しか記憶できないと仮定すると,[−2 31−2^{31}−231,2 31−1 2^{31}−1 231−1の数値範囲である.この仮定に基づいて、反転後に整数がオーバーフローした場合は0を返します.
解法
int reverse(int x) {
	 //INT_MIN         ,      ,  0
    if (x == INT_MIN) return 0;
	// tmp        ,flag    ,0 1 
    int tmp = 0, flag = 0;
    if (x < 0)
    {
       x = -x;
       flag = 1;
    }
    while (x != 0)
    {
        tmp = tmp * 10 + (x % 10);
        if(tmp > INT_MAX / 10 && x >= 10) return 0;
        x /= 10;
    }
    if (tmp < 0) return 0;
    if (flag == 1) return -tmp;
    else return tmp; 
}