问题
母亲正在为儿子准备上大学4年的学费,方式是整存零取,规定儿子每月月底取下一个月的生活费,每个月的生活费是1000元。现在假设银行的年利息为1.71%,请编写程序,计算母亲最少需要存入多少钱?
思路
月利率等于年利率除以12,4年等于4×12=48个月。最少存入多少钱的意思就是说最后把本利都能取出来。于是第48个月的生活费实际上是在第47个月的月末取出来的,而第一个月的生活费则是妈妈直接给的。设每个月账户里的钱为x,月利率为r%,则下个月的本息之和为x(1+r%),再扣去生活费就是x(1+r%)-1000。那么已知下个月的本息之和再扣去生活费为y,上个月的账户余额就是(y+1000)/(1+r%)。于是第一个月的存入的钱就是(y+1000)/[(1+r%)^48]。这个是逆推算法思想的应用案例。
使用
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
Solution.getSumMoney();
}
}
输出
第48月的账户余额是:0.00 RMB
第47月的账户余额是:998.58 RMB
第46月的账户余额是:1995.73 RMB
第45月的账户余额是:2991.47 RMB
第44月的账户余额是:3985.79 RMB
第43月的账户余额是:4978.70 RMB
第42月的账户余额是:5970.19 RMB
第41月的账户余额是:6960.27 RMB
第40月的账户余额是:7948.94 RMB
第39月的账户余额是:8936.21 RMB
第38月的账户余额是:9922.07 RMB
第37月的账户余额是:10906.53 RMB
第36月的账户余额是:11889.59 RMB
第35月的账户余额是:12871.24 RMB
第34月的账户余额是:13851.51 RMB
第33月的账户余额是:14830.37 RMB
第32月的账户余额是:15807.85 RMB
第31月的账户余额是:16783.93 RMB
第30月的账户余额是:17758.62 RMB
第29月的账户余额是:18731.93 RMB
第28月的账户余额是:19703.85 RMB
第27月的账户余额是:20674.39 RMB
第26月的账户余额是:21643.55 RMB
第25月的账户余额是:22611.33 RMB
第24月的账户余额是:23577.73 RMB
第23月的账户余额是:24542.76 RMB
第22月的账户余额是:25506.41 RMB
第21月的账户余额是:26468.69 RMB
第20月的账户余额是:27429.60 RMB
第19月的账户余额是:28389.15 RMB
第18月的账户余额是:29347.33 RMB
第17月的账户余额是:30304.15 RMB
第16月的账户余额是:31259.60 RMB
第15月的账户余额是:32213.70 RMB
第14月的账户余额是:33166.43 RMB
第13月的账户余额是:34117.82 RMB
第12月的账户余额是:35067.85 RMB
第11月的账户余额是:36016.52 RMB
第10月的账户余额是:36963.85 RMB
第9月的账户余额是:37909.83 RMB
第8月的账户余额是:38854.46 RMB
第7月的账户余额是:39797.75 RMB
第6月的账户余额是:40739.69 RMB
第5月的账户余额是:41680.30 RMB
第4月的账户余额是:42619.57 RMB
第3月的账户余额是:43557.50 RMB
第2月的账户余额是:44494.09 RMB
第1月的账户余额是:45429.36 RMB
Process finished with exit code 0
代码实现
package com.company;
public class Solution {
static public void getSumMoney() {
double ratePerMonth = 0.001425;//月利率
final double finalLivingExpenses = 1000;//最后一个月生活费是1000rmb。
double accountBalance = 0;//最后一个月的账户余额。
int monthSum = 48;//总月数4年
while (monthSum > 0) {
System.out.println("第" + monthSum + "月的账户余额是:" + String.format("%.2f RMB",accountBalance));
accountBalance = (accountBalance + finalLivingExpenses) / (1 + ratePerMonth);
monthSum--;
}
}
}