読者です 読者をやめる 読者になる 読者になる

水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

CODE FESTIVAL 2014 決勝(オープン) C - N進数(2015/06/01)

回答

Submission #418326 - CODE FESTIVAL 2014 決勝(オープン) | AtCoder

例えば,f(23) = 2 * 23 + 3 = 46 となるので,A=46のときに,k=23として,kを出力しなさいという問題.条件を満たすkがなければ,-1を出力.
この時,kは10以上であるので,A<10ならば,即-1を出力して終わり(そこに最初気付かなかった)

愚直にf(k)を計算しても,最大でkは10000にしかならないので,普通に間に合うはず(事実間に合っている)
f(k)をどう求めるかだけが少し難しかったかな.あとはただのループ処理なので!

def calc(num):
    numli = list(map(int, list(str(num))))
    numli = numli[::-1]
    res = 0
    for i in range(0, len(numli)):
        res += numli[i] * (num ** i)
    return res
 
A = int(input())
if A < 10:
    print(-1)
    exit(0)
 
res = 1
while True:
    c = calc(res)
    if A == c:
        print(res)
        break
    elif c > A:
        print("-1")
        break
    res += 1