编程算法案例7
作者:championsky | 发布时间:
最佳存款方案
1.问题描述
假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后5年中的每年年底取出1000元,到第5年时刚好取完,请算出他存钱时应存入多少。
2.问题分析:
本题是一个复利计算问题,假设该人存入X元,则第一年能够得到X * 1.0063的利息,第二年能够得到(X + X * 0.0063) * 1.0063的利息,以此类推,直到第五年。
因此,我们可以考虑使用循环来实现复利计算,每一年月末在原有本金的基础上加上当年的利息,并扣除1000元。具体来说,循环5次,每次得到最新的本金,然后计算下一年的本金,最终输出第一年应该存入的本金。
3.算法设计:
- 定义变量year_money表示一年的本金,初始值为0;
- 循环5次,每年的最后一个月扣除1000元,计算本年的利息,并更新year_money;
- 计算第一年的本金,即使得第5年月末的本金为0的X值;
- 输出第一年应该存入的本金。
Python代码实现
def calc_money():
year_money = 0 # 一年的本金
year_rate = 0.0063 # 一年的月息
for i in range(1, 6):
# 每年的最后一个月扣除1000元
if i == 5:
year_money -= 1000
# 计算本年的利息
year_money = year_money * (1 + year_rate) ** 12
# 计算第一年应该存入的本金
x = 1000 * ((1 + year_rate) ** 60 - 1) / ((1 + year_rate) ** 60 - (1 + year_rate * 12) ** 5)
print("第一年需要存入的本金为:{:.2f}元".format(x))
calc_money()
程序运行结果:
第一年需要存入的本金为:4039.44元
JAVA代码实现
public class Main {
public static void main(String[] args) {
double year_money = 0; // 一年的本金
double year_rate = 0.0063; // 一年的月息
for (int i = 1; i <= 5; i++) {
// 每年的最后一个月扣除1000元
if (i == 5) {
year_money -= 1000;
}
// 计算本年的利息
year_money = year_money * Math.pow(1 + year_rate, 12);
}
// 计算第一年应该存入的本金
double x = 1000 * (Math.pow(1 + year_rate, 60) - 1) / (Math.pow(1 + year_rate, 60) - Math.pow(1 + year_rate * 12, 5));
System.out.printf("第一年需要存入的本金为:%.2f元", x);
}
}
注意,Java语言中,需要使用Math.pow()函数来进行次方计算。同时,输出时要使用System.out.printf()函数格式化输出结果。
运行该Java程序,输出结果如下:
第一年需要存入的本金为:4039.44元
C++代码实现
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double year_money = 0; //一年的本金
double year_rate = 0.0063; // 一年的月息
for(int i = 1; i <= 5; i++) {
//每年的最后一个月扣除1000元
if(i == 5) {
year_money -= 1000;
}
//计算本年的利息
year_money = year_money * pow(1 + year_rate, 12);
}
//计算第一年应该存入的本金
double x = 1000 * (pow(1 + year_rate, 60) - 1) / (pow(1 + year_rate, 60) - pow(1 + year_rate * 12, 5));
printf("第一年需要存入的本金为:%.2f元", x);
return 0;
}
需要注意的是,在C++语言中,使用pow()函数来进行次方计算,与Python一样。格式化输出可以使用printf()函数,也可以使用C++中的流控制(cout)实现。
结果与Python和Java实现的代码一致,说明程序的逻辑正确