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