0%

P1163 银行贷款 - 洛谷

P1163 银行贷款 - 洛谷 # 银行贷款

题目描述

当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。

输入格式

三个用空格隔开的正整数。

第一个整数表示贷款的原值 \(w_0\),第二个整数表示每月支付的分期付款金额 \(w\),第三个整数表示分期付款还清贷款所需的总月数 \(m\)

输出格式

一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到 \(0.1\%\)

数据保证答案不超过 \(300.0\%\)

样例 #1

样例输入 #1

1
1000 100 12

样例输出 #1

1
2.9

提示

数据保证,\(1 \leq w_0, w\leq 2^{31}-1\)\(1 \leq m\leq 3000\)

1
2
3
4
5
6
7
8
9
bool check(double mid)
{
double sumt = w0;
for (int i = 1; i <= m; i++)
sumt = sumt + sumt * mid - w;
if (sumt > 0)
return true;
return false;
}

可以将 check 省略这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;
double w, w0, m, l, r, sum;
int main()
{
ios::sync_with_stdio(false), cin.tie(nullptr);
cin >> w0 >> w >> m;
l = 0,r = 300;
while (r-l > 1e-5)
{
bool ok = false;
double mid = (l + r) / 2,sumt = w0;
for (int i = 1; i <= m; i++)
sumt = sumt + sumt * mid - w;
if (sumt > 0) ok = true;
if (ok) r = mid;
else l = mid;
}
cout << setprecision(1) << fixed << l*100 << '\n';
}

  • 本文作者: FXJFXJ
  • 本文链接: https://fxj.wiki/posts/7cd48c46/
  • 版权声明: 本博客所有文章除特别声明外,均采用 ZERO 许可协议。转载请注明出处!