逆推算法demo
作者:bin逆推算法
一个实例,不能用明推时,可以考虑用逆推的方式
/**
* 逆推算法
* 母亲为儿子准备大学4年的生活的存款,方式是「整存零取」,
* 母亲一次全存进去,儿子每个月定时取1000快。
* 假设银行利息年华是3%,那么要存多少钱进去,才够儿子每个月取着用。
*
* 思路:可以确定最后一个月钱为1000
* 假设上个月的钱是A,那么 1000 = A + (A * 0.03/12) - 1000
* 即 [剩余] = [上月剩余] + (上月剩余 * 利息) - 每月取的
*/
@Test
public void testHexToBase64s(){
Integer totalMonth = 47; //月
Double rate = 3.00; //利率
Double rates = (rate * 0.01 / 12) + 1; //被除数
BigDecimal b1 = new BigDecimal(rates.toString());
Double last = 1000.00; //每个月的钱
List<Double> months = Lists.newArrayList();
months.add(last);
for (int i = 0; i < totalMonth; i++) {
BigDecimal b2 = new BigDecimal(last);
//获取上个月的钱
BigDecimal beforeMonth = b2.divide(b1,2, BigDecimal.ROUND_HALF_UP);
last = beforeMonth.doubleValue() + 1000L;
months.add(last);
}
System.out.println(months);
}