トピックの概要
- タイトル:第七タイトル
- 難易度:簡単
- 内容は:32ビット符号付き整数を与える、あなたはそれぞれ逆に、この整数番号が必要です。例1:
入力:123出力:321
例2:
入力:出力-123:-321
例3:
入力:120出力:21
注意:
我々は、32ビット符号付き整数、[-231 231--1]の[値の範囲を格納することができる環境を持っていると仮定する。整数オーバーフローの後、それは0を返し、逆ならば、この仮説によるとしてください。
出典:滞在ボタン(LeetCode)リンクします。https://leetcode-cn.com/problems/reverse-integer
最初のアイデア
最初は、整数問題の範囲を考えていない、唯一の三つの整数を考慮します。
コード
class Solution {
public:
int reverse(int x) {
int bai;
int shi;
int ge,y;
bai = x/100;
shi = x/10%10;
ge = x%10;
y=ge*100+shi*10+bai;
if(x<0)
{
return y=-y;
}
return y;
}
};
テスト送信
テスト結果は3つのだけの整数を満たすことができ、他の条件を満たしていません
分析
2点タイトル注意があります。
- 正2,147,483,647(INT_MAX定数によって表される)の値を32ビット符号付き整数、(INT_MIN定数によって表される)負2,147,483,648価値の範囲だけでなく、3つの整数
- リバース方法
改善します
-
番号-9 9に、直接出力することができます
-
オーバーフロー番号は、0が返されます。
-
whileループを使用して、中間部分が解決します。
①。新しい長整数を規定の数が逆記憶するようにした後
実行②。Xモジュロ演算の後、構造体は、yに渡されます。たとえば:321、1 10を法として、1をYに送信されるが、10、32に丸めX;第二のサイクルにおいて、Y * 10は、10に等しく、動作、Y = 12、Xを繰り返します= 3、Y = 123、X = 0の場合、ループを終了します
改善されたコード
class Solution {
public:
int reverse(int x) {
long y=0;
if(x>-9&&x<9){
return x;
}
else{
while(x){
y=y*10;
if(y<=INT_MIN||y>=INT_MAX)
return 0;//溢出
y=y+x%10;
x=x/10;
}
return y;
}
}
};
Submitを改善
_@~L5.png)
収穫の概要
対象は比較的簡単ですが、このようなオーバーフローの問題だけでなく、問題を単純化するためのコードと、考慮する必要が詳細があります。