银行贷款
题目描述
当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。
输入格式
三个用空格隔开的正整数。
第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。
输出格式
一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到 0.1%。
输入输出样例
输入
1000 100 12
输出
2.9
说明/提示
数据保证,1≤贷款的原值,分期付款金额≤2的31次方−1,1≤ 月数≤3000。
这是一道二分题
二分
while (r - l >= 0.0001) { // 二分答案
mid = (l + r) / 2;
if (!check(mid))
break;
if (check(mid) == 1)
l = mid;
else
r = mid;
}
代码
#include <bits/stdc++.h>
using namespace std;
double n, m, s, ans;
int k;
int check(double u) {
double sum = 0, v = 1;
for (int i = 1; i <= k; i++) {
v *= (1 + u);
sum += (m / v);
}
if (sum == n){
return 0;
}
if (sum > n)
return 1;
else
return -1;
}
int main() {
cin >> n >> m >> k;
double l = 0, r = 800, mid;
while (r - l >= 0.0001) { // 二分答案
mid = (l + r) / 2;
if (!check(mid))
break;
if (check(mid) == 1)
l = mid;
else
r = mid;
}
printf("%.1lf", mid * 100); //mid*100 --> 百分数处理
return 0;
}