整数を任意の基数の文字列に変換するにはどうすればいいですか? 質問する

整数を任意の基数の文字列に変換するにはどうすればいいですか? 質問する

Pythonでは、与えられた基数の文字列から簡単に整数を作成できます。

int(str, base). 

逆の操作、つまり整数から文字列の作成を実行したいのですが、次のint2base(num, base)ような関数が必要です。

int(int2base(x, b), b) == x

関数名/引数の順序は重要ではありません。

受け入れ可能な任意の数xと基数。bint()

これは簡単に記述できる関数です。実際、この質問で説明するよりも簡単です。しかし、何かが欠けているような気がします。

bin、、octなどの関数については知っていますhexが、いくつかの理由で使用できません。

  • これらの関数はPythonの古いバージョンでは利用できないため、(2.2)との互換性が必要です。

  • 異なる基数に対して同じように呼び出せる一般的なソリューションが欲しい

  • 2、8、16以外の基数も許可したい

関連している

ベストアンサー1

驚いたことに、人々は小さな基数(英語のアルファベットの長さよりも小さい)に変換するソリューションのみを提供していました。2 から無限大までの任意の基数に変換するソリューションを提供しようとした人はいませんでした。

そこで、非常にシンプルな解決策をご紹介します。

def numberToBase(n, b):
    if n == 0:
        return [0]
    digits = []
    while n:
        digits.append(int(n % b))
        n //= b
    return digits[::-1]

したがって、非常に大きな数を基数に変換する必要がある場合は577

numberToBase(67854 ** 15 - 102, 577)、正しい答えが得られます: [4, 473, 131, 96, 431, 285, 524, 486, 28, 23, 16, 82, 292, 538, 149, 25, 41, 483, 100, 517, 131, 28, 0, 435, 197, 264, 455]

後で任意のベースに変換できます

  1. ある時点で、必要なことを実行する組み込みライブラリ関数が存在しないことに気付くことがあります。その場合は、独自の関数を作成する必要があります。同意しない場合は、10 進数を 577 進数に変換できる組み込み関数を使用した独自のソリューションを投稿してください。
  2. これは、ある基数の数値が何を意味するのか理解していないために起こります。
  3. メソッド内の base が n <= 36 の場合にのみ機能する理由を少し考えてみることをお勧めします。考えてみると、私の関数がリストを返し、そのシグネチャを持つ理由が明らかになります。

おすすめ記事