CODE FESTIVAL 2014 決勝 C - N進数
問題
10以上の整数Nで、N進数でNとなる数字をf(N)とします。
f(23)は、2*23+3=49
この49にあたるのが、入力Aです。10以上の整数からf(k)となるkを出力します。kが存在しない場合は-1を出力します。
制約
- 1 A
考えたこと
Aが最大値でも、kは10000なことがサンプルでもわかります。10からすべてを試せばよさそうです。
#define _GIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (n); ++i) #define all(v) v.begin(), v.end() using namespace std; using ll = long long; int main(void) { ll A; cin >> A; for (ll k = 10; k <= 10000; ++k) { ll n = k; ll fk = 0; ll d = 0; while (n > 0) { ll temp = n % 10; rep(i, d) temp *= k; fk += temp; ++d; n /= 10; } if (fk == A) { cout << k << endl; return 0; } } cout << -1 << endl; return 0; }