使用C++无需数学库计算投资未来累计价值的问题求解
代码问题修正及实现方案
你的现有代码存在三处需要调整的逻辑:
- 月利率计算时机错误:你在读取
annualInterestRate之前就完成了月利率计算,此时annualInterestRate是未初始化的随机值,计算结果完全错误,需要把月利率计算放在读取年利率之后。 - 利率单位转换缺失:输入提示明确要求输入百分比形式的年利率,比如输入4.2代表4.2%,你没有做百分比转小数的处理,会导致利率计算偏差100倍。
- 幂运算逻辑缺失:你当前的写法是直接乘法而非指数运算,由于总投资月数是正整数,不用
pow()的前提下可以直接用循环累乘实现幂计算。
修正后的完整代码如下:
#include <iostream> using namespace std; int main() { double investmentAmount; double annualInterestRate; double monthlyInterestRate; double numberOfYears; cout << "Enter investment amount: "; cin >> investmentAmount; cout << endl; cout << "Enter annual interest rate in percentage: "; cin >> annualInterestRate; cout << endl; cout << "Enter number of years: "; cin >> numberOfYears; cout << endl; // 百分比转小数后计算月利率 monthlyInterestRate = annualInterestRate / 100.0 / 12.0; int totalMonths = static_cast<int>(numberOfYears * 12); double ratePower = 1.0; // 循环累乘实现幂运算:(1+月利率)的总月数次方 for (int i = 0; i < totalMonths; i++) { ratePower *= (1.0 + monthlyInterestRate); } double accumulatedValue = investmentAmount * ratePower; cout << "Accumulated value is " << accumulatedValue <<endl; return 0; }
核心逻辑说明:
总投资月数是明确的正整数,我们初始化累乘变量为1,循环总月数次每次乘以(1+月利率),最终得到的就是公式要求的(1 + monthlyInterestRate)的numberOfYears × 12次方结果,完全满足不引入数学库的要求。
内容的提问来源于stack exchange,提问作者James Harden
相关产品推荐
相关产品推荐

