過程が大事

学んだことを適当にアウトプットします

Atcoder bit全探索

問題

atcoder.jp 与えられた数値に対して各桁間に+を入れていく。

125を入力とすると

125
1+25=26
12+5=17
1+2+5=8
総和:125+26+17+8 = 176
>>>176

このことから間桁間で+を入れるか入れないかの2択のある問題だとわかる。 (len(n)-1)2回数ループすればできそう。

今回の例だと(3-1)2 = 4

00:125
01:12+5
10:1+25
11:1+2+5

解法

S = input()
n = len(S) - 1

ans = 0
# 各桁の間
for i in range(2 ** n):
    f = S[0]
    for j in range(n):
        if (i >> j) & 1:
            f += '+'  # 桁間に+を追加
        f += S[j + 1]  # 次の数を追加
    ans += eval(f)
print(ans)