还可以
查看原帖
还可以
1757147
hsl295931楼主2025/7/31 15:29
#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的利率值。
2025/7/31 15:29
加载中...