1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C++实现银行贷款等额本息和等额本金还款

C++实现银行贷款等额本息和等额本金还款

时间:2022-12-13 06:57:44

相关推荐

C++实现银行贷款等额本息和等额本金还款

C++实现银行贷款等额本息和等额本金还款

1.等额本金

概念:等额本金就是每个月还款的本金是相同的,即为贷款金额/贷款月数。

计算公式:

B=Amonths+a∗rateB = \frac{A}{months} + a * rate B=monthsA​+a∗rate

其中B表示当前月的还款额,A表示贷款总额,months表示贷款总月数,a表示剩余本金,rate表示月利率。

2.等额本息

概念:等额本息是每个月利息和本金加起来的金额相等。

计算公式为:

B=A∗i∗(1+i)n(1+i)n−1B=\frac{A*i*\left(1+i\right)^n}{(1+i)^n-1} B=(1+i)n−1A∗i∗(1+i)n​

其中B为每个月还的金额,A为贷款总额,i为月利率,n为贷款总月数。

公式推导:假设每个月还款金额为Bf(t)表示第t月还完后的剩余本金。

第一期:

f(1)=A(1+i)−Bf(1) = A(1+i) - B f(1)=A(1+i)−B

其中A(1+i)是本金加上利息总和,减去B即为第一期还完后剩余的本金。

第二期:

f(2)=f(1)(1+i)−Bf(2) = f(1)(1+i) - B f(2)=f(1)(1+i)−B

.

.

.

最后一期:

f(n)=f(n−1)(1+i)−Bf(n) = f(n-1)(1+i)-B f(n)=f(n−1)(1+i)−B

最后一期还清则

f(n)=f(n−1)(1+i)−B=0f(n) = f(n-1)(1+i)-B=0 f(n)=f(n−1)(1+i)−B=0

f(n)−Bi=f(n−1)(1+i)−B−Bif(n) - \frac{B}{i} = f(n-1)(1+i) - B - \frac{B}{i} f(n)−iB​=f(n−1)(1+i)−B−iB​

f(n)−Bi=f(n−1)(1+i)−Bi(1+i)f(n) - \frac{B}{i} = f(n-1)(1+i) - \frac{B}{i}(1+i) f(n)−iB​=f(n−1)(1+i)−iB​(1+i)

f(n)−Bi=[f(n−1)−Bi](1+i)f(n) - \frac{B}{i} = [f(n-1)- \frac{B}{i}](1+i) f(n)−iB​=[f(n−1)−iB​](1+i)

f(n)−Bi=[f(1)−Bi](1+i)n−1f(n) - \frac{B}{i} = [f(1)- \frac{B}{i}](1+i)^{n-1} f(n)−iB​=[f(1)−iB​](1+i)n−1

f(n)=0f(1)代入(10),得到

(1+i)n−1∗[A(1+i)−B−Bi]+Bi=0(1+i)^{n-1}*[A(1+i)-B-\frac{B}{i}]+\frac{B}{i}=0 (1+i)n−1∗[A(1+i)−B−iB​]+iB​=0

最后整理得:

B=A∗i∗(1+i)n(1+i)n−1B=\frac{A*i*\left(1+i\right)^n}{(1+i)^n-1} B=(1+i)n−1A∗i∗(1+i)n​

3.代码

/** @Description: 银行贷款等额本息和等额本金的还款方式* @Author: szq* @Github: /MrQqqq* @Date: -07-01 09:32:19* @LastEditors: szq* @LastEditTime: -07-01 12:01:45* @FilePath: \cpp\src\bank_loan.cpp*/ #include<iostream>#include<math.h>#include<iomanip>using namespace std;/*** @destription: 等额本息每个月还款额和还款总额(本金加总利息)* @param {type} :principal:本金 months:贷款总月数 rate:年利率* @return: 没有返回值*/void average_capital_plus_interest(double principal,int months,double rate){double total_per_month;//等额本息每个月还款总额double total_principal_interest;//本金和利息总额double rate_month = rate / 12;//月利率total_per_month = principal * rate_month * pow(rate_month + 1,months) / (pow(rate_month + 1,months) - 1);total_principal_interest = total_per_month * months;cout << "等额本息还款详情为:" << endl;cout << "每个月还款额为:" << setiosflags(ios::fixed) << setprecision(2) << total_per_month << endl;cout << "还款总额为:" << setiosflags(ios::fixed) << setprecision(2) << total_principal_interest << endl;}/*** @destription: 等额本金每个月还款额和还款总额(本金加总利息)* @param {type} :principal:本金 months:贷款总月数 rate:年利率* @return: 没有返回值*/void average_interest(double principal,int months,double rate){double principal_per_month = principal / months;//等额本金每个月还款本金double total_principal_interest = 0;//本金和利息总额double rate_month = rate / 12;//月利率cout << "等额本金还款详情为:" << endl;for(int i = 1;i <= months;i++){double total_per_month = principal * rate_month + principal_per_month;//每期还款总额principal = principal - principal_per_month;//剩余本金cout << "第" << i << "个月还款金额为:" << setiosflags(ios::fixed) << setprecision(2) << total_per_month << endl;total_principal_interest += total_principal_interest;}cout << "还款总额为:" << setiosflags(ios::fixed) << setprecision(2) <<total_principal_interest << endl;}int main(){double principal;//本金double rate;//年利率double months;//贷款月数cout << "请输入贷款额度:";cin >> principal;cout << endl;cout << "请输入贷款期限(单位:月):";cin >> months;cout << endl;cout << "请输入贷款年利率:";cin >> rate;cout << endl;int choice = 1;//还款方式,1为等额本息,2为等额本金cout << "1.等额本息" << endl;cout << "2.等额本金" << endl;cout << "请选择还款方式:" ;cin >> choice;cout << endl;switch (choice){case 1:average_capital_plus_interest(principal,months,rate);break;case 2:average_interest(principal,months,rate);break;default:break;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。