银行贷款
时间限制: 1 Sec 内存限制: 128 MB
提交: 44 解决: 13
[提交][状态][讨论版]
题目描述
当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。
输入
仅一行包含三个用空格隔开的正整数。
第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。
第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。
输出
一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到0.1%。
样例输入
1000 100 12
样例输出
2.9
【分析】等额本息计算公式:〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }