在我要测试正确性的编程问题中,我遇到了以下情况,我担心我不知道好的解决方案.
http://codeabbey.com/index/task_view/mortgage-calculator
简而言之:这是给定规模的贷款,P按利率逐月增加,然后减去R% / 12客户的每月付款M.在L几个月的债务减少到零(即客户支付出来).
它看起来是给定的P,M而且R我可以很容易地计算出L用简单的循环.但这是相反的任务 - 我要找到M给定贷款期限的每月付款L以及P和R.
我想也许我可以使用二进制搜索来测试不同的变体M并反复计算L它们......但我不确定这是否合适 - 我想知道可能存在一些我找不到的直接数学解法?
提前致谢!
你可以在恒定的时间内计算出来.
Rm = R / 12
M = P * Rm / ((1 - (1 + Rm)^(-L)))
Run Code Online (Sandbox Code Playgroud)
在哪里^代表取幂.例如:
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
Run Code Online (Sandbox Code Playgroud)
让我们看看它是否有效:
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
Run Code Online (Sandbox Code Playgroud)
在这里,你在第五个月之后完全还清了.由于四舍五入,该数字不匹配100%.你会根据轮M上的链接213但是你最终四舍五入它,它圆了,不下来.