银行贷款

银行贷款

题目描述

当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。

输入

仅一行包含三个用空格隔开的正整数。
第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。

输出

一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到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;
}
原文地址:https://www.cnblogs.com/dyzll/p/5769182.html