#include <iostream>
#include <iomanip> // 用于控制输出格式
using namespace std;
double ben, xi, yue; // 全局变量:本金、每月还款额、还款月数
// 定义计算函数P(x),x为月利率
double P(double x){
double sben = ben; // 剩余本金初始值
int i;
// 模拟每月还款过程
for(i = 1; i <= yue; i++){
// 计算每月还款后的剩余本金
sben = sben - (xi - sben * (x / 100.0));
}
// 判断最终剩余本金是否还清
if(sben >= 0) return 1; // 已还清或超额
else return -1; // 未还清
}
int main(){
int i;
double l, r, mid; // 二分法变量
// 输入本金、每月还款额和还款月数
cin >> ben >> xi >> yue;
// 设置二分法初始区间[0,本金]
l = 0.0;
r = ben;
// 使用二分法求解月利率
for(i = 1; i <= 100; i++){
mid = (l + r) / 2.0; // 计算中点
// 根据P(mid)的返回值调整区间
if(P(mid) == 1)
r = mid; // 利率过高,调整上限
else
l = mid; // 利率过低,调整下限
}
// 输出计算得到的月利率(保留1位小数)
cout << fixed << setprecision(1) << l;
return 0;
}
这段代码实现了:
通过二分法计算贷款的实际月利率
模拟每月还款过程来判断利率是否合适
输出保留1位小数的最终结果
算法原理:通过二分法不断调整利率区间,模拟还款过程,直到找到使最终剩余本金接近0的利率值。