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

Pythonで指定した基数表現に0が連続して含まれるかどうかを判定する方法

プログラミングでは、ある数値を特定の基数(進法)で表したとき、その桁並びの中に「0」が連続して現れるかどうかを調べたいことがあります。本記事では、Pythonを使ってこの判定を行う方法を解説します。

実装の流れとしては、数値と基数を引数として受け取る関数を定義し、その内部で別の補助関数を呼び出すことで、条件を満たすかどうかに応じて「Yes」または「No」を出力します。

サンプルコード

def check_consecutive_zero(N, K):
    my_result = convert_to_base(N, K)
    if (check_n(my_result)):
        print("Yes")
    else:
        print("No")

def convert_to_base(N, K):
    weight = 1
    s = 0
    while (N != 0):
        r = N % K
        N = N // K
        s = r * weight + s
        weight *= 10
    return s

def check_n(N):
    res = False
    while (N != 0):
        r = N % 10
        N = N // 10

        if (res == True and r == 0):
            return False
        if (r > 0):
            res = False
            continue
        res = True
    return True

N, K = 8, 2
print("Does the number have consecutive zeroes in the base ?")
check_consecutive_zero(N, K)

実行結果

Does the number have consecutive zeroes in the base ?
No

コードの解説

  • check_consecutive_zero:数値Nと基数Kを受け取り、判定処理全体をまとめるメインの関数です。

  • convert_to_base:剰余演算(%)と整数除算(//)を繰り返し適用することで、10進数の数値を指定された基数Kの表現へと変換します。

  • check_n:変換後の数値を1桁ずつ取り出しながら走査し、0が連続して現れているかどうかをチェックします。

  • 判定結果に応じて、「Yes」または「No」が出力されます。

  • ここでは例として、N=8、K=2 を設定しています。

  • NとKを渡してcheck_consecutive_zero関数を呼び出し、結果をコンソールに表示します。

このように、基数変換と桁ごとの走査を組み合わせることで、任意の基数における連続ゼロの有無をシンプルなコードで判定できます。基数変換の仕組みやループによる桁操作の考え方は、他の数値処理にも応用できる基本的なテクニックです。

  1. Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法

    ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け

  2. Pythonで与えられたグラフが2部グラフかどうかを判定するプログラム

    2部グラフとは無向グラフが与えられたとき、そのグラフが2部グラフ(バイパータイトグラフ)であるかどうかを判定する方法を解説します。2部グラフとは、グラフのすべての頂点を2つの集合 A と B に分割でき、グラフ内のすべての辺 {u, v} が必ず一方の端点 u が集合 A、もう一方の端点 v が集合 B に属するようなグラフのことです。つまり、同じ集合内の頂点同士を結ぶ辺(A-A や B-B)が一切存在しないグラフです。例として、次のようなグラフを考えてみましょう。この場合、頂点 [0, 4] を集合 A に、[1, 2, 3] を集合 B に分類できます。すべての辺は A から B、または