リバース数 - アルゴリズム

逆転の数

問題の説明

32ビット符号付き整数を与え、あなたはそれぞれ逆に、この整数値を必要とします。

例1:

入力:123
出力:321
例2:

入力:-123
出力:-321
例3:

入力:120
出力:21
注:

私たちは環境を保存することができているとし32 位、[シンボルを整数で、その値の範囲であります 2 31 -2 ^ {31} 2 31 1 2 ^ {31} - 1 ]。整数オーバーフローの後、それは0を返し、逆ならば、この仮説によるとしてください。

分析

ここでは、0を返す場合は、適切なデータ型を選択し、データのオーバーフロー、このデータのオーバーフローの可能性を検討すべき重要な問題です。

コードの実装

class Solution {
public:
    int reverse(int x) {
        if(x/10 == 0) return x; //一般个位情况,不需要反转,原样输出
        int y = 0;
        while(x) {
            if(y > INT_MAX/10 || y < INT_MIN/10) //数据溢出
                return 0;
            y *= 10;
            y += x%10; //取出x的个位,存入y中相应的位置
            x /= 10;   //去掉x的个位
        }
        return y;
    }
};

業績

输入

123

输出

321

概要

スプリットの端から1、新規スプライシングから最初の数で元の数を使用しての反転。データ・オーバーフロー制御用いintタイプの上限と下限を- INT_MAXINT_MIN制御。

ので、int32ビットのバイト4を占有し、規則に従って二値化

INT_MAX = 2 31 2 ^ {31} -1

INT_MIN = - 2 31 2 ^ {31}

C / C ++は、すべてが制限を超え、オーバーフローが発生するがあるでしょうwarningが、表示されませんerror

注意:有符号(signed)数最高位为符号位,在无溢出(overflow、underflow)的情况下,其符号位不变,符号也就不变。

发布了59 篇原创文章 · 获赞 5 · 访问量 5054

おすすめ

転載: blog.csdn.net/qq_38496329/article/details/104084554