Pythonで数値内のすべての0を5に置き換えるプログラムを作成する方法
整数 N が与えられたとき、その数値に含まれるすべての「0」を「5」に置き換えることが課題です。ただし、先頭にある「0」は有効な桁として扱われないため、置き換えの対象から除外されます。それでは、具体的な例を見てみましょう。
入力例1
N = 1007
出力
1557
解説: 与えられた数値には2つの「0」が含まれており、これらを「5」に置き換えると「1557」になります。
入力例2
N = 00105
出力
155
解説: 先頭の「0」は無視され、中央の「0」を「5」に置き換えることで「155」という出力が得られます。
この問題を解くためのアプローチ
数値内のすべての「0」を「5」に置き換えるには、まず数値の下1桁(最後の桁)を取り出して確認します。その桁が「0」であれば「5」に置き換え、その後、残りの桁に対して同じ処理を繰り返します。先頭の「0」は無視する必要があるため、下の桁から順番に処理を進めていくのがポイントです。
数値 N を入力として受け取ります。
関数 convertToFive(N) は、数値を受け取り、すべての「0」を「5」に置き換えた結果を返します。
最後の桁が「0」である場合、その値を「5」に置き換えます。
数値を10で割って次の桁へ移動し、桁の位置(placeValue)を10倍しながら処理を繰り返します。
各桁の計算結果を加算し、最終的な出力を返します。
コード例
def convertToFive(number):
number += calculateAddedValue(number)
return number
def calculateAddedValue(number):
result = 0
placeValue = 1
if number == 0:
result += 5 * placeValue
while number > 0:
if number % 10 == 0:
result += 5 * placeValue
number //= 10
placeValue *= 10
return result
print(convertToFive(14006))
出力
上記のコードを実行すると、次の出力が得られます。
14556
解説: 与えられた数値「14006」には2つの「0」が含まれています。これらを「5」に置き換えることで、「14556」という結果になります。
仕組みの解説
このアルゴリズムでは、元の数値に「加算すべき値」を足し合わせることで0を5に変換しています。たとえば「14006」の場合、十の位と百の位が「0」であるため、それぞれ「50」と「500」を加算します。14006 + 50 + 500 = 14556 となり、目的の結果が得られる仕組みです。
この手法は文字列操作を行わず、純粋な数値演算だけで処理できるため、効率的かつシンプルな実装となっています。
-
Pythonで数値の各桁の合計を求める方法(文字列を使わない実装)
ある数値 num が与えられたとき、その各桁の数字をすべて足し合わせた合計を求めます。ここでは、文字列に変換せず、数値演算だけで解く方法を紹介します。たとえば、入力が num = 512 の場合、5 + 1 + 2 = 8 となるため、出力は 8 になります。解き方の手順合計を格納する変数 sum を 0 で初期化します。num が 0 になるまで、次の処理を繰り返します。sum に「num を 10 で割った余り」(最下位の桁)を加算します。num を「10 で割った商」(整数)で更新します。繰り返しが終わったら sum を返します。アルゴリズムのポイントこの手法では、「10 で割った余り」
-
指定した範囲内で奇数個の約数を持つ要素の個数を求めるPythonプログラム
本記事では、以下の問題文に対する解決策について詳しく解説します。 問題文 問題 − ある範囲 [n, m] が与えられたとき、その範囲内に存在する「奇数個の約数を持つ数」の個数を求めます。 アプローチ まず押さえておきたい重要な性質として、「完全平方数だけが奇数個の約数を持つ」ということが挙げられます。これは、約数が通常ペア(d と n/d)で現れるのに対し、完全平方数の場合は平方根に相当する約数だけがペアにならず単独で存在するためです。 したがって、この問題は「指定された範囲内に含まれる完全平方数の個数を数える」ことに帰着できます。 なお、n と m はどちらも範囲に含まれるため、境界値での