pontz_rwのブログ

プログラミング等の備忘録

Volume0: 0007

借金地獄 | Aizu Online Judge

以下の操作を n 回繰り返せば良いです。

  1. 借金に利子を加える
  2. 1000未満を切り上げ

C++

借金の計算は以下の通りです。

  1. 借金に金利を加える
  2. 1000未満を切り上げするために、999を加える
  3. 1000で割って千の位未満の桁を飛ばす
  4. 1000を掛けて千の位未満の桁を0にする
#include <iostream>
using namespace std;

int n;
int debt = 100000;
const int DIGITS = 1000;
const float INTEREST_RATE = 1.05;

int main()
{
    cin >> n;

    for (int i = 0; i < n; ++i) {
        // 借金に利子を加え、1000円未満を切り上げ
        debt = ((int)((debt * INTEREST_RATE + DIGITS - 1) / DIGITS)) * DIGITS;
    }

    cout << debt << endl;
    return 0;
}

Python

math.ceil(x)関数は、x以上の最小の整数を返します。

借金を百の位で切り捨てるためには、百の位が小数点第一位となるように調整し、math.ceil()を使用すれば良いです。

# coding: utf-8

from math import ceil

DEBT = 100000
DIGITS = 1000
INTEREST_RATE = 1.05

def calc_debt(n):
    "n週間後の借金を計算する"

    # 借金の百の位が小数点第一位となるよう調整
    d = DEBT // DIGITS

    # 毎週利子を加える
    while n > 0:
        d = ceil(d * INTEREST_RATE)  # 借金の小数点以下を切り捨て
        n  -= 1

    # 調整した借金を元に戻して返却する
    return d * DIGITS

n = int(input())

print(calc_debt(n))