题目描述
当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。
输入格式
三个用空格隔开的正整数。
第一个整数表示贷款的原值 w0,第二个整数表示每月支付的分期付款金额 w,第三个整数表示分期付款还清贷款所需的总月数 m。
输出格式
一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到 0.1%。
数据保证答案不超过 300.0%。
输入输出样例
输入 #1复制
1000 100 12
输出 #1复制
2.9
说明/提示
数据保证,1≤w0,w≤2^31−1,1≤m≤3000。
思路:暴力二分,利用精确度输出
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int w0,w,m;
int main()
{
cin>>w0>>w>>m;
double r=3.0001,l=0,mid;
while(l<r)
{
double u=r-l;
double a=w0;
int i;
mid=(r+l)/2;
if(u<0.0001)
{
printf("%.1lf",mid*100);
break;
}
for(i=1;i<=m;i++)
a=a*(1+mid)-w;
if(a>0)r=mid;
if(a<0)l=mid;
if(a==0)printf("%.1lf",mid*100);
}
return 0;
}