1 以上 N 以下の整数のうち、10 進法での各桁の和が A 以上 B 以下であるものの総和を求める問題です。
提出
n, a, b = map(int, input().split())
ans = 0
for i in range(1,n+1):
num = sum(map(int, str(i)))
if a<=num<=b:
ans += i
print(ans)
1 以上 N 以下の数字を全て確かめる方法でできます。
0から始まるため、「range(1,n+1)」であることに注意が必要です。
数字を一度文字列に変換しています。文字列にすることで、それぞれの文字にインデックス番号が振り分けられ、一つずつ取り出せるようになります。
各要素をmap関数で整数にし、その合計値がA 以上 B 以下であるかを確認します。
条件に合えば ans に元の整数(各桁の合計値ではなくて)を足します。
map()関数
map()関数は、イテラブル(リストやタプルなど)の各要素に関数の処理を適用します。
map(関数、イテラブル)
まとめて以下のように書くこともできます。
提出
n, a, b = map(int, input().split())
print(sum(i for i in range(1, n+1) if a <= sum(map(int, str(i))) <= b))
条件に合う i を合計したものを出力しています。