银行贷款月利率计算公式:
总贷款数=月还款*((1+r)**(-1)+(1+r)**(-2)+......+(1+r)**(-总还款月数)
总贷款数=P[0]=初始总贷款数=M*((1+r)**(-1)+(1+r)**(-2)+......+(1+r)**(-t)
这个公式可以递归得到
关键在于利息=总欠款数*利率,设利率是r
其中总欠款数是随每个月还款逐渐减少的,按规定月数每月还款后最终总欠款数为0
而利率是定值
于是尝试递推
某月还款缴纳前总贷款数*r等于利息
该月缴纳的月换款用于还本金的部分就等于(月还款数-某月还款缴纳前总贷款数*r)
于是某月还款缴纳后总贷款数=某月还款缴纳前总贷款数-月还款数+某月还款缴纳前总贷款数*r
即P[n+1]=P[n]*(1+r)-M
p[i]即缴纳第i月还款后总欠款数
P[0]=初始总贷款数
如果总还款月数是t
则P[t]=0
p[t]=p[t-1]*(1+r)-M=0
则P[t-1]=M*(1+r)**(-1)
依次递推直到P[0],即可得到公式
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define speed_up ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const double eps=1e-5;
double sum,m,t;
double f(double r){
double per=1/(1+r);
double ans=0;
double mi=per;
for(int i=1;i<=t;i++){
ans+=mi;
mi*=per;
}
return ans;
}
int main(){
cin>>sum>>m>>t;
double l=0,r=10.0;
while(r-l>eps){
double mid=(l+r)/2.0;
if(f(mid)<=sum/m)r=mid;
else l=mid;
}
printf("%.1lf",l*100);
return 0;
}