Pythonで8進数の10進数表現が7で割り切れるかどうかを判定する方法
8進数で表された数値が与えられたとき、その10進数表現が7で割り切れるかどうかを判定する問題を考えてみましょう。
例えば、入力が n = 61 の場合、出力は True になります。これは、8進数の61を10進数に変換すると 6×8 + 1 = 48 + 1 = 49 となり、49が7で割り切れるためです。
解法のポイント
この問題を効率的に解く鍵となるのは、「8 ≡ 1 (mod 7)」という性質です。8進数の各桁は8のべき乗で重み付けされていますが、8のべき乗はすべて7で割ると1余るため、各桁の数字を単純に足し合わせた合計は、元の数値を7で割った余りと一致します。
つまり、各桁の数字の合計が7で割り切れるかどうかを調べるだけで、10進数に変換した値が7で割り切れるかを判定できるのです。
アルゴリズムの手順
- 合計値 sum を 0 で初期化する
- num が 0 になるまで以下を繰り返す
- sum に「num を 10 で割った余り」(最下位桁) を加算する
- num を 10 で整数除算し、桁を一つ削る
- sum を 7 で割った余りが 0 であれば True を返す
- それ以外の場合は False を返す
それでは、実際の実装を見てみましょう。
サンプルコード
def solve(num):
total = 0
while num:
total += num % 10
num = num // 10
if total % 7 == 0:
return True
return False
num = 61
print(solve(num))※組み込み関数 sum() との名前衝突を避けるため、変数名を total としています。
入力
61
出力
True
このように、8進数の桁の合計が7の倍数であれば、その10進数表現も必ず7で割り切れることが確認できます。計算量は桁数に比例する O(d) となり、非常にシンプルかつ高速な判定方法です。
-
Pythonで10進数を2進数に変換する方法|再帰と組み込み関数の2つのアプローチ
この記事では、10進数で表された数値を2進数に変換するPythonプログラムについて、その考え方と具体的な実装方法をわかりやすく解説します。 問題文 ある整数が与えられたとき、その数値を2進数に変換します。例えば、10進数の「35」は2進数では「100011」と表現されます。 アプローチ1:再帰を使った解法 再帰処理を利用すると、シンプルなコードで10進数を2進数に変換できます。基本的な流れは以下の擬似コードのとおりです。 DecToBin(num): if num > 1: &n
-
数値の2進表現が回文かどうかを判定するPythonプログラム
ここでは、Pythonの組み込み関数を活用して、数値の2進表現が回文(パリンドローム)になっているかどうかを判定します。まず bin() 関数で数値を2進数形式の文字列に変換し、次にその文字列を反転させて元の文字列と比較します。両者が一致すれば回文、一致しなければ回文ではないと判断できます。 実行例 Input: 5 Output: palindrome 解説 数値 5 の2進表現は 101 です。 この文字列を反転しても 101 のままなので、元の文字列と一致します。 したがって、5 は回文であると判定されます。 アルゴリズム Palindromenumber(n) /* n は判定対