4

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

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

很快:这是一笔给定规模的贷款,P每月按利率增加R% / 12,然后从中M减去客户的每月付款。几个月L后,债务减少到零(即客户付清)。

看起来是给定的P,我可以用简单的循环轻松计算。但这是相反的任务 - 我要找到给定贷款期限的每月付款以及和。MRLMLPR

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

提前致谢!

4

2 回答 2

5

您可以在恒定时间内计算此值。

Rm = R / 12

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

where^代表取幂。例如:

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。但是,您最终会舍入它,将其舍入而不是向下舍入。

于 2013-11-01T11:27:00.030 回答
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))
于 2016-10-03T01:34:14.007 回答