クッキーもぐもぐ

PC関係とか映画とかゲームとかの

Pythonで各桁の和を、数値処理だけで行う方法

よくある対象の各桁の処理を行うアルゴリズム。 はじめに通常の文字列処理(楽)を行う方法を紹介し、そのあとそれをしない方法を考える。

まずは普通に文字列を使う場合

例1: 各桁の和

数値→文字列化→map1つを数値としてリスト化して合計を求める。

n = 1234
result = sum(list(map(int, str(n)))) #10

例2: その数値に特定の数字が含まれているか検索

数値→文字列化→文字列を検索

#対象に3が含まえれているとき、反応(なべあつ問題?
n = 1234
if "3" in str(n): print("3!") #3!

本題:あえて文字列処理を一切行わない場合

例1: 各桁の和

10で割った余りを順番にみていく
「10で割った余りを加算→対象を10で割って切り捨て」
を対象が0になるまで繰り返し

def keta_sum(n):
    sum = 0
    while n>0:
        sum += n%10 #対象の桁を加算
        n = n//10 # 次の桁をみる
    return(sum)
n = 1234
print(keta_sum(n))

例2: その数値に特定の数字が含まれているか検索

10で割った余りを順番にみていく
「10で割った余りをみる→対象を10で割って切り捨て」
を対象が0になるまで繰り返し

#対象に3が含まえれているとき、反応
def hoge(n):
    while n>0:
        if n%10 == 3:
                return("3!") #対象の桁が3だったらreturn
        n = n//10 # 次の桁をみる

n = 1234
print (hoge(n))

おわり

文字列処理したくない~ってとき、10進法じゃなくてn進法で判定したい~ってときには使えるかも?