競プロ・数学を頑張りたい(願望)

競技プログラミングの問題を解いたときや数学に関してのメモにしようと思っています。競プロはAOJを、数学は数検準1を目標で。

AOJ0007 Debt Hell

コメント

切り上げの問題。最初はよく分からなかったけど調べたら納得した。他の数字を切り上げるときでも大丈夫なようにちょっと一般化してみる。
(一般化)
ある数字aのn桁目を切り上げるとき、n << 1で割った余りrが0なら行わない。余りrが存在するなら、(n << 1) - rをaに足してあげればいい。
(ビット演算に慣れるためにもあえて表現してみたw)

ソース

import java.util.Scanner;

public class Main {

	int range = 1000;

	// 1000未満なら切り上げ
	// 1000で割った余りrが0じゃなければ1000-rを足す
	void run() {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = 100000;

		for (int i = 0; i < n; i++) {
			m += m * 5 / 100;
			int r = m % range;
			if (r != 0) {
				m += range - r;
			}
		}
		System.out.println(m);
		sc.close();
	}

	public static void main(String[] args) {
		new Main().run();
	}