電源ボタン逆整数第タイトル

トピックの概要

  • タイトル:第七タイトル
  • 難易度:簡単
  • 内容は: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点タイトル注意があります。

  1. 正2,147,483,647(INT_MAX定数によって表される)の値を32ビット符号付き整数、(INT_MIN定数によって表される)負2,147,483,648価値の範囲だけでなく、3つの整数
  2. リバース方法

改善します

  1. 番号-9 9に、直接出力することができます

  2. オーバーフロー番号は、0が返されます。

  3. 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を改善

IMG_@~L5.png)

収穫の概要

対象は比較的簡単ですが、このようなオーバーフローの問題だけでなく、問題を単純化するためのコードと、考慮する必要が詳細があります。

おすすめ

転載: www.cnblogs.com/HanLongfeng/p/11874116.html