問題010

某国に住んでいる友達がお金に困って、あるヤミ金融業者から10万円の借金をしたまま、全く返済していないといいます。
この業者は、一週間ごとに5%の利子を借金に加え、さらに借金の1,000円未満を切り上げます。

nを入力したとき、n週間後の借金の残高を出力し終了するプログラムを作成してください。
ただしnは100以下とします。

入力

n(整数)

出力

n週間後の返済額(整数)

入力例

5

出力例

130000

考え方

最大の問題は「1,000未満を切り上げ」の部分でしょう。

(i)1000未満が全部0、つまり1000で割り切れる場合(例3000)

何もしません。

(ii)そうでない、つまり切り上げる場合(例3150)

まず1000未満を切り捨てます。次のようにします。

1000で割る
3150→3.150
整数に強制変換する(キャストなどで)
3.150→3
1000をかけてもどす
3→3000

で、1000をたすと切り上げになります。
3000→4000



Java
//
//A010.java
//

import java.io.*;

public class A010{
    public static void main(String[] args)throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int week=Integer.parseInt(br.readLine());
        int money=100000;

        for(int i=0;i<week;i++){
            double temp=money*1.05;
            //1000で割り切れるなら
            if(temp%1000==0){
                //何もしない
                money=(int)temp;
            //割り切れないなら切り上げる
            }else{
                //1000で割って整数にして1000をかければ切り捨て、そして1000をたして切り上げ
                money=(int)(temp/1000)*1000+1000;
            }
        }

        System.out.println(money);
        br.close();
    }
}

正しくゲームをするページ>パソコン甲子園攻略>ココ