Pythonで整数の桁を逆順に反転する方法を解説
問題の概要
32ビット符号付き整数が与えられ、その各桁を逆順に並べ替えることを考えます。たとえば、入力が425であれば出力は524となります。また、整数は符号を持つため、負の数にも対応する必要があります。入力が-425の場合は、-524が出力されます。
前提条件と制約
この問題では、扱う値は32ビット符号付き整数の範囲、すなわち-2147483648 ~ 2147483647(-231 ~ 231-1)に収まるものとします。もし反転後の結果がこの範囲を超えてオーバーフローする場合は、関数は0を返します。
解き方のアプローチ
この問題はPythonを使うと非常にシンプルに解けます。基本的な流れは以下の通りです。
- 与えられた整数を文字列に変換する
- 先頭の文字が「-」であれば負の数として、符号を除いた部分だけを逆順にする
- 逆順にした文字列を再び整数に変換して返す
- 結果が32ビット整数の範囲外であれば0を返す
Pythonのスライス記法[::-1]を使うと、文字列を簡単に逆順にできます。負の数の場合はx[-1:0:-1]のように指定することで、末尾から符号を除いた部分までを逆順に取り出せます。
実装例
それでは、理解を深めるために実際のコードを見てみましょう。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
x = str(x)
if x[0] == '-':
a = int('-' + x[-1:0:-1])
if a >= -2147483648 and a <= 2147483647:
return a
else:
return 0
else:
a = int(x[::-1])
if a >= -2147483648 and a <= 2147483647:
return a
else:
return 0
ob1 = Solution()
print(ob1.reverse(-425))
コードのポイント
str(x):整数を文字列に変換し、桁ごとの操作を容易にします。x[-1:0:-1]:負号を除いた部分を末尾から先頭方向へ逆順に取得します。x[::-1]:文字列全体を逆順にします(正の数の場合に使用)。- 範囲チェックにより、結果が32ビット整数の範囲を超えた場合は0を返します。
入力
print(ob1.reverse(-425))
出力
-524
-
Pythonのbin()関数の使い方:10進数を2進数に変換する方法
Pythonのbin()関数は、10進数の整数を2進数(バイナリ)表現の文字列に変換する組み込み関数です。引数には正の整数でも負の整数でも指定できます。構文bin()関数の基本的な構文は以下のとおりです。bin(n) 引数:変換対象となる整数 戻り値:整数またはintオブジェクトを2進数表現した文字列 例外:引数にfloat型(浮動小数点数)を渡すとTypeErrorが発生します次の例では、正の整数と負の整数をそれぞれ2進数に変換しています。結果には「0b」という接頭辞が付き、それが2進数表現であることを示します。使用例n = input(Enter an integer :") d
-
正の整数のビットを反転するPythonプログラムの書き方
Pythonで正の整数のビット順を逆にするには、まず bin() 関数を使って数値を2進数に変換します。bin() は変換結果の先頭に「0b」というプレフィックスを付加するため、その最初の2文字を除外し、残りの部分を反転させます。さらに、指定されたビットサイズに合わせて、反転した文字列の末尾に0を補完します。最後に、反転した2進数の文字列を整数へと変換し直すことで、ビットが反転された値が得られます。 アルゴリズム integernumber(n, bit_size) /* n は対象の数値、bit_size はビットサイズ */ ステップ1: まず bin() 関数で数値を2進数に変換する。