名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

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