逆転の数
問題の説明
32ビット符号付き整数を与え、あなたはそれぞれ逆に、この整数値を必要とします。
例1:
入力:123
出力:321
例2:入力:-123
出力:-321
例3:入力:120
出力:21
注:私たちは環境を保存することができているとし
32 位
、[シンボルを整数で、その値の範囲であります 、 ]。整数オーバーフローの後、それは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_MAX
とINT_MIN
制御。ので、
int
32ビットのバイト4を占有し、規則に従って二値化INT_MAX = -1
INT_MIN = -
C / C ++は、すべてが制限を超え、オーバーフローが発生するがあるでしょう
warning
が、表示されませんerror
。
注意:有符号(signed)数最高位为符号位,在无溢出(overflow、underflow)的情况下,其符号位不变,符号也就不变。