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進法で判定したい~ってときには使えるかも?