7.逆整数[E]は整数反転します

タイトル

32ビット符号付き整数与えられ、整数の数字を逆。
例1: X = 123、321返す
例2を: X = -123 -321を返す
例3: X = 120、21を返します

C ++のアイデア

キーは、オーバーフローを判断することです。
C ++の知識:

  • 整数範囲:\( - 31は2 ^ {} \ SIM 31が2 ^ {-1} \)
  • 短半減機械語は、int型は、機械語の1または2種類の限り、機械語であります
  • STOI()文字処理機能、文字列にデジタル出力に変換INT、および範囲を確認するためにランタイムエラーが範囲外になる場合、範囲は、int型のデフォルトの範囲内であります

逆整数:
桁のモジュロ演算により現在の入力xを読み出し、最後のビットの後に逆方向に整数S、XはS * 10の最後のビットを付加した新しいS、左xに対応シフト。X = X / 10の操作により、右X、xはビット数追い出し小数点に変換し、その後残りを取るされているが、新たな数字を得るようになっています。
裁判官のオーバーフロー:

  • そしてINT_MAX、INT_MINを比較します
  • いくつかの計算を対数、こぼした場合は、操作の前に逆のアクションと値の値が同じではありません

1思考:
長い長い直接または長い計算、従ってないオーバーフローを確実にし、数値オーバーフローが反転か否かを判断します

int reverse(int x){
  long long res=0;
  while(x!=0){
    int t = res * 10 + x % 10;
    if(t /10 != res)
      return 0;
    res = t;
    t /= 10;
  }
  return res;
}

2アイデア:
文字列変換によって、ストイので()関数int例外処理メカニズムを使用して、範囲チェック、のために。

int reverse(int x){
  std::string str = std::to_string(x);
  if(str[0] == '-')
    std::reverse(str.begin()+1,str.end());
  else
    std::reverse(str.begin(),str.end());
  try{
    return stoi(str);
  }
  catch(out_of_range ex){
    return 0;
  }
}

Pythonのアイデア

Pythonの知識:

  • 断片化文字列。3つの別個のデジタル割出しオペレータが存在する(:)、最初の番号がデフォルトの文字列の開始位置、すなわち、インデックス0で、開始値であり、端部が終わる第二の数は、デフォルトの文字列の値です。文字; 3番目の数字はステップサイズで、デフォルトは1です。
  • ステップは-1、後方にあるパイソン
  • Pythonは出発値の範囲を含む、半開放間隔を使用するが、最終的な値を含んでいません。

思考:
Pythonのintは長整数であり、32ビットの大きさを直接比較することによって決定することができる整数オーバーフローです。これは、文字列フラグメントを逆転させることによって達成されます。

def reverse(self, x):
  if x >= 0:
    s = (int)(str(x)[::-1])  
  else:
    s = -(int)(str(-x)[::-1])
  if s >= -(2**31) and s <= (2**31)-1:
    return s
  else:
    return 0

おすすめ

転載: www.cnblogs.com/Jessey-Ge/p/10993432.html