schedule2018-07-23

整数の各桁の和を求める方法 | Python

整数の各桁の和を求める方法について。

とあるサイトの問題を解いていて、題意のコードをすっきり書けたので紹介します。 (その問題はもう一工夫必要です)

Pythonでは少ない記述で計算することができます。

各桁の合計を求める

""" 
各桁の合計値を計算
"""
def digitSum(n):
    # 数値を文字列に変換
    s = str(n)
    # 1文字ずつ数値化し配列にする。
    array = list(map(int, s))
    # 合計値を返す
    return sum(array)

print(digitSum(123))
# => 6
print(digitSum(35829))
# => 27

digitSum(n))は数値を受け取り各桁の合計値を返します。

数値を文字列にしてから、list(map(int, s))で一文字ずつ整数のリストに変換する。 最後にsum()で合計を計算しています。

ワンライナーだと

n = 123456

result = sum(list(map(int, str(n))))
# => 21

指定の桁になるまで各桁の合計を求める

指定桁数になるまで再帰的に計算を繰り返してみます。

""" 
各桁の合計値を計算
桁数が1になるまで繰り返す
"""
def digitSum(n):
    # 桁数を判定する
    if len(str(n)) is 1:
        return n
    dst = sum(list(map(int, str(n))))
    return digitSum(dst)


if __name__ == "__main__":
    n = 12345
    result = digitSum(n)

    print(int(result))  # 15

if文の数値を変えると任意の桁数まで求めます。