https://atcoder.jp/contests/abc200/tasks/abc200_b
解説
https://atcoder.jp/contests/abc200/submissions/22435193
問題では一部文字列として計算しているが、普通に数値計算できるので、数値計算としてやっていくのがオススメ。
ちなみに、文字列を経由しても、間に合う。
整数がNが200の倍数
普通に N /= 200をすればいい。
200を末尾に追加する
これは数値計算で考えると1000倍して+200することになる。
こうすることで数値計算ができる。
上限は?
数値計算時に気になるのが上限である。
2番目の操作前をxとすると、操作後は1000x+200となるが、これは200の倍数なので、
2番目の操作後は必ず1番目の操作を行う事になる。
すると5x+1になる。
単純に計算すると5倍されるような感じになって、この操作が最大10回行われるので、105*510が最大になりそうな数である。
これは976562500000なので、C++ならlong longなら収まるので問題ない。
int N, K; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> K; ll x = N; rep(_, 0, K) { if (x % 200 == 0) x /= 200; else x = x * 1000 + 200; } cout << x << endl; }