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 | bool check(double mid) |
可以将 check 省略这样写: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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';
}