Debt Hell [AIZU ONLINE JUDGE 0007]
問題
100000 に以下の操作を n 回おこなった後の値を求めよ。
・1.05倍し、1000未満を切り上げる
考察
まず 1.05倍する 操作についてですが、「v * 1.05」とするよりも「v * 105 / 100」としたほうが誤差が少なくなります。
次に 1000 未満を切り上げる 操作について。
値が 1000 で割り切れる場合は、1000 で切り上げる必要はなく、そのままの値にすればよいです。
そうでない場合は、1000 未満を切り捨ててから 1000 を足します。1000 未満を切り捨てるには、値から値を 1000 で割った余りを引けばよいです。
コード
void solve (FastScanner in, PrintWriter out, Methods ms) { int n = in.nextInt(); double init = 100000; for (int i=0; i<n; i++) { init = init * 105 / 100; init = init%1000==0? init : init - (init%1000) + 1000; } out.println((int)init); }