Connection Status:
Competition Arena > Mortgage
SRM 189 · 2004-03-31 · by lars2520 · Math, Search
Class Name: Mortgage
Return Type: int
Method Name: monthlyPayment
Arg Types: (int, int, int)
Problem Statement

Problem Statement

When purchasing a new home, the purchasers often take out a loan to pay for it. In this problem, we will be considering loans with the following terms:
  • At the beginning of each month, the purchasers pay a fixed amount towards settling the loan, which decreases the amount they owe.
  • At the end of the month, the amount the purchasers owe increases due to interest. Each month, 1/12 of the annual interest rate is added to the amount owed. Hence, if the annual interest rate is 12%, then the debt increases by 1% each month. You may assume that the amount owed after adding interest is always rounded up to the nearest dollar greater than or equal to the actual value.
Your task is, given the annual interest rate in tenths of a percent, the original amount of the loan, and the period over which the loan is to be repaid, calculate the minimum integral monthly payment so that the loan is repaid in term years or less. All monetary units are in dollars.

For example, if loan = 1000, interest = 50, and term = 1, then the loan is for $1000, to be paid back in one year, at an annual interest rate of 5%, or (5/12)% per month. If the purchasers pay back $86 every month, then the total amount owed will be as follows after each month:
month | after making payment | after interest accrues
------+----------------------+------------------------------------
 1    | 1000 - 86 = 914      | ceiling(914 * (1 + 5/12/100)) = 918
 2    | 918 - 86  = 832      | ceiling(832 * (1 + 5/12/100)) = 836
 3    | 836 - 86  = 750      | 754
 4    | 754 - 86  = 668      | 671
 5    | 671 - 86  = 585      | 588
 6    | 588 - 86  = 502      | 505
 7    | 505 - 86  = 419      | 421
 8    | 421 - 86  = 335      | 337
 9    | 337 - 86  = 251      | 253
 10   | 253 - 86  = 167      | 168
 11   | 168 - 86  = 82       | 83
 12   | 86 is more than enough to pay off the rest 
Clearly, 85 a month wouldn't be enough, since we just barely paid off the loan at 86.

Constraints

  • loan will be between 100 and 2,000,000,000, inclusive.
  • interest will be between 1 and 1,000,000, inclusive.
  • term will be between 1 and 1000, inclusive.
Examples
0)
1000
50
1
Returns: 86

From the problem statement.

1)
2000000000
6000
1
Returns: 671844808

interest = 6000 means that the monthly interest is a whopping 50%!

2)
1000000
1000000
1000
Returns: 988143

The interest is so high that even if we had 1000 years to pay back the loan, we'd still have to pay almost a million dollars a month.

3)
1000000
129
30
Returns: 10868
4)
100
1
1000
Returns: 2

Submissions are judged against all 84 archived test cases, of which 5 are shown here. Case numbers match the judge’s.

Coding Area

Language: C++17 · define a public class Mortgage with a public method int monthlyPayment(int loan, int interest, int term) · 84 test cases · 2 s / 256 MB per case

Submitting as anonymous