银行贷款(二分)

银行贷款

时间限制: 1 Sec  内存限制: 128 MB
提交: 44  解决: 13
[提交][状态][讨论版]

题目描述

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

输入

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

输出

一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到0.1%。

样例输入

1000 100 12

样例输出

2.9

【分析】等额本息计算公式:〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include<functional>
#define mod 1000000007
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
const int N=105;
const int M=150005;
int vis[N];
int id[N];
int n,m,k,t;
double ans;
bool check(double x)
{
    x=x/100;
    double q=1;
    for(int i=1;i<=t;i++)q=q*(1+x);
    return n*x*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(check(mid))ans=mid,l=mid;
        else r=mid;
    }
    printf("%.1f
",ans);
    //system("pause");
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/jianrenfang/p/5771244.html