银行贷款
题目描述
当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。
输入
仅一行包含三个用空格隔开的正整数。
第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。
第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。
输出
一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到0.1%。
样例输入
1000 100 12
样例输出
2.9
分析:等额本息计算公式:〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
知道公式后就可以二分了,至于为什么右边界开到1000,应该是高利贷的缘故吧。。。
代码:
include <bits/stdc++.h> const int maxn=1e5+10; using namespace std; int n,m,k,t; double ans; bool work(double p) { p=p/100; double q=1; for(int i=1;i<=t;i++)q=q*(1+p); return n*p*q/(q-1)<=1.0*m; } int main() { int i,j; scanf("%d%d%d",&n,&m,&t); double l=0,r=1000; while(r-l>1e-10) { double mid=(l+r)/2; if(work(mid))ans=mid,l=mid; else r=mid; } printf("%.1f ",ans); //system("pause"); return 0; }