1. 现值计算问题解析
现值计算是金融数学中的基础概念,也是计算机算法竞赛中常见的题型。这道题目要求我们根据给定的现金流和利率,计算这些资金在当前时点的总价值。理解现值的计算原理不仅能帮助我们解决算法题目,在实际生活中进行投资决策时也非常有用。
我们先来看题目要求:给定n+1个现金流(x0到xn)和年利率i,需要计算这些现金流在当前时点的总现值。现值的计算公式为:PV = Σ(xk / (1+i)^k),其中k从0到n。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路分析
2.1 数学原理拆解
现值计算的核心是货币的时间价值概念。简单来说,今天的1元钱比未来的1元钱更值钱,因为今天的钱可以投资获得利息。因此,我们需要把未来的现金流"折现"到现在。
公式中的(1+i)^-k部分就是折现因子,它表示第k期的现金流在当前时点的价值。当k=0时(即当前时刻),折现因子为1,不需要折现;k越大,折现因子越小,表示未来的钱在当前的价值越低。
2.2 算法设计思路
基于这个数学原理,我们可以设计如下算法:
- 读取输入的n(期数)和i(利率)
- 初始化总和total为0
- 循环读取每期现金流x
- 对每期现金流计算其现值并累加到total
- 输出结果,保留3位小数
这个算法的时间复杂度是O(n),因为只需要一次遍历所有现金流。空间复杂度是O(1),只需要常数级别的额外空间。
3. 代码实现详解
3.1 完整代码展示
cpp复制#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main(){
int n;
double i;
cin>>n>>i;
double total=0.0;
for(int k=0;k<=n;k++){
int x;
cin>>x;
total+=x*pow(1+i,-k);
}
cout<<fixed<<setprecision(3)<<total<<endl;
return 0;
}
3.2 关键代码解析
- 输入处理:
cpp复制
