Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】文字列を使わずに数値が回文(パリンドローム)かどうかを判定するプログラム

本記事では、非負整数 num が与えられたとき、その数値が回文(パリンドローム)であるかどうかを判定する方法を解説します。ポイントは、文字列変換を一切使わずに数値演算だけで解くことです。

たとえば、入力が num = 25352 の場合、前から読んでも後ろから読んでも「25352」で同じになるため、出力は True になります。

アルゴリズムの考え方

文字列に変換せずに回文を判定するには、数値そのものを逆順に組み立て直すという手法を使います。具体的には、剰余演算(% 10)で下の桁から1桁ずつ取り出し、それを別の変数の末尾に付け加えていくことで、元の数値の反転を作れます。

手順

  • a := 0(反転結果を格納する変数)、c := num(元の値のコピー)で初期化します。

  • num > 0 の間、以下を繰り返します。

    • r := num mod 10 … 一番下の桁を取り出します。

    • num := floor(num / 10) … 取り出した桁を削除します。

    • a := (10 * a) + r … 取り出した桁を反転結果の末尾に追加します。

  • ループ終了後、ac が一致すれば True を返し、一致しなければ False を返します。

この処理により、num の桁は下の位から順に a へ移動するため、ループ終了時点で a は元の数値を完全に反転したものになります。反転した数値と元の数値が等しければ、それは回文だと言えます。

実装例

それでは、実際のPythonコードを見てみましょう。

def solve(num):
   a = 0
   c = num
   while num > 0:
      r = num % 10
      num = num // 10
      a = (10 * a) + r
   if a == c:
      return True
   else:
      return False

num = 25352
print(solve(num))

入力

25352

出力

True

まとめ

この方法なら、str() やスライスといった文字列操作に頼らず、純粋な算術演算だけで回文判定が可能です。計算量は数値の桁数に比例する O(log n) となり、非常に効率的です。なお、負の数は符号があるため定義上回文にならない点にも注意してください。

  1. 指定された文字列がキーワードであるかどうかを確認するPythonプログラム

    この記事では、指定された文字列がPythonのキーワード(予約語)であるかどうかを判定する方法について解説します。問題の概要与えられた文字列が、Pythonにおけるキーワードであるかどうかを確認する必要があります。キーワードとは、言語によって特別な用途のために予約されている単語であり、変数名や関数名などの識別子として使用することはできません。例えば「if」「for」「while」「def」などはすべてキーワードです。これらの名前を変数に使おうとすると、構文エラーが発生します。解決策:keywordモジュールの活用Pythonには標準ライブラリとしてkeywordモジュールが用意されており、これ

  2. Pythonで文がパングラムかどうかを判定するプログラムの作り方

    与えられた文がパングラム(パングラム:pangram)であるかどうかを判定するのが、本記事のテーマです。パングラムとは、アルファベットのすべての文字(a〜z)を少なくとも1回は含んでいる単語や文のことを指します。たとえば有名な例として「The quick brown fox jumps over the lazy dog」が挙げられます。 この問題は、Pythonのset()メソッドやリスト操作を組み合わせることで、シンプルに解決できます。 判定条件の例 Input: string = abc def ghi jkl mno pqr stu vwx yz Output: Yes // ‘a’