贷款计算器任务 - 如何通过贷款期限找到每月付款?

时间:2013-11-01 10:02:29

标签: algorithm math

在我要测试正确性的编程问题中,我遇到了以下情况,我担心我不知道这个好的解决方案。

http://codeabbey.com/index/task_view/mortgage-calculator

很快:这是一个给定大小P的贷款,每月按利率R% / 12增加,然后减去客户的每月付款M。超过L个月的债务减少到零(即客户支付了它)。

看起来给定PMR我可以使用简单循环轻松计算L。但这是相反的任务 - 我将按给定的贷款期限M以及LP找到每月付款R

我想也许我可以使用二进制搜索来测试M的不同变体并为他们反复计算L ......但我不确定这是否合适 - 我不知道可能存在一些我找不到的直接数学解法?

提前感谢!

2 个答案:

答案 0 :(得分:5)

您可以在恒定时间内计算出来。

Rm = R / 12

M = P * Rm / ((1 - (1 + Rm)^(-L)))

^代表取幂的地方。例如:

P = 1000
R = 24% = 0.24
Rm = 0.24 / 12 = 0.02
L = 5 months

M = 1000 * 0.02 / (1 - 1.02^(-5))
M = 212.16

让我们看看它是否有效:

P0 = 1000
P1 = 1020 // interest
P1' = 807,84 // rate paid, end of first month
P2 = 823,9968
P2' = 611,8368 // after second month
P3 = 624,073536
P3' = 411,913536 // after third month
P4 = 420,15180672
P4' = 207,99180672 // after fourth month
P5 = 212,1516428544

在这里,你在第五个月之后完全还清了。由于四舍五入,该数字不匹配100%。你可以根据M到213的链接。然而你最终将它围绕它,围绕它向上,而不是向下

答案 1 :(得分:0)

今天挣扎着。 我认为他们想要没有公式的任务。像传动装置一样。出于教育目的。 对我来说也很难。因此,在以前的二元搜索方程问题的灵感之后,我终于找到了一种方法。

def incrMontant(montant,interest,months,payment=0):
while months:
    increment = montant * (interest/100) /12
    montant += increment
    montant -= payment   #this trick call other function.
    months-=1
return montant

def payment(montant,interest,months):
pay = 0
while incrMontant(montant,interest,months,pay) > 0:
    pay += 1
return pay

montant, interest, months = (int(x) for x in input().split())
print(payment(montant,interest,months))