月利率
题目描述
为了早日实现买房娶媳妇的梦想,小明在攒够房子的首付款后一次性地向银行贷款借了a元钱,并约定分b个月还清。如果银行要求每月还贷c元钱,请问月利率x是多少(按照复利计息法计算)?提示:按照复利计息法,第一个月还贷c元钱后还欠银行a(1+x)-c元钱。如果第m个月还贷后还欠银行n元钱,则第m+1个月还贷后还欠银行n(1+x)-c元钱。另外,小明借贷银行,非地下黑钱庄,所以月利率最高不超过100%;当然,天下没有免费的午餐,银行在这笔借贷业务中也不可能亏损,所以月利率最低不低于0%。例如:借2000元,分4个月还清,每月还贷510元,则月利率为0.797%。
输入格式
输入a(实数) b(整数) c(实数)
输出格式
输出x(实数,保留三位小数)
样例输入
2000.0 4 510.0
样例输出
0.797%
提示/说明
按照复利计息法,第一个月还贷c元钱后还欠银行a(1+x)-c元钱。如果第m个月还贷后还欠银行n元钱,则第m+1个月还贷后还欠银行n(1+x)-c元钱。另外,小明借贷银行,非地下黑钱庄,所以月利率最高不超过100%;当然,天下没有免费的午餐,银行在这笔借贷业务中也不可能亏损,所以月利率最低不低于0%。
思路:
二分用了个零点定理。
这题暂时性放弃了,代码问学弟给的。
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 10, mod = 998244353;
double a,c;
int b;
double work(double x) {
double sum = a;
for (int i = 0; i < b; ++ i) {
sum = sum * x - c;
if (sum < 0) return sum;
}
return sum;
}
signed main() {
cin.tie(0), cout.tie(0)->sync_with_stdio(false);
int t = 1;
while (t --) {
cin >> a >> b >> c;
double l = 1, r = 2;
while (abs(l - r) > 0.000000001) {
double mid = (l + r) / 2;
double x = work(mid), y = work(l);
if (x * y <= 0 || (x > 0 && y > 0)) r = mid;
else l = mid;
}
printf("%.3lf%%\n",(l - 1)*100);
}
return 0;
}
文章描述了一个计算月利率的问题,小明向银行贷款并按月还款。使用复利计息法,通过二分查找算法寻找满足条件的月利率。程序读入贷款金额、还款月数和每月还款额,输出月利率(保留三位小数)。
月利率&spm=1001.2101.3001.5002&articleId=129405490&d=1&t=3&u=bd4720d73dfd4a388da5b4e758d5cca3)
1191

被折叠的 条评论
为什么被折叠?



