[NICA #1] 年金现值系数表
题目描述
小 A 最近在研究财务事项。
在财务计算中,年金现值系数是一个常用概念。它定义,PVIFA(i,n)=[1−(1+i)−n]i\mathrm{PVIFA}(i,n)=\dfrac{[1-(1+i)^{-n}]}{i}PVIFA(i,n)=i[1−(1+i)−n],其中 iii 表示每期利率,nnn 表示年金支付天数。例如,PVIFA(5%,10)=[1−(1+5%)−10]5%=7.7217\mathrm{PVIFA}(5\%,10)=\dfrac{[1-(1+5\%)^{-10}]}{5\%}=7.7217PVIFA(5%,10)=5%[1−(1+5%)−10]=7.7217。你不必在意 PVIFA\mathrm{PVIFA}PVIFA 的具体含义。
小 A 希望你能把年金现值系数以表格的形式打印出来,方便他快速查阅。具体而言,你应该输出一张表格,纵轴表示期数,横轴表示每期利率。如下图:
输入格式
输入一行,两个正整数 nnn 和 iii,表示表格中需要绘制的行数和列数。
输出格式
输出 n+1n+1n+1 行 i+1i+1i+1 列的图表。规定如下:
- 第一行第一列为
\t
; - 第一行第二列起往后一共 iii 个位置,依次输出 1%,2%,…,i%1\%,2\%,\dots,i\%1%,2%,…,i%,以
\t
作为分隔符; - 第二行第一列起往下每行的第一列,依次输出 1,2,…n1,2,\dots n1,2,…n,与后面的内容以
\t
作为分隔符。 - 第二行第二列开始,设当前为第 aaa 行第 bbb 列,则只需输出 PVIFA((b−1)%,a−1)\mathrm{PVIFA}((b-1)\%,a - 1)PVIFA((b−1)%,a−1) 保留四位小数的值,以
\t
作为分隔符。 - 每行行末以
\n
作为换行符,不应出现多余的\t
。
样例 #1
样例输入 #1
10 5
样例输出 #1
1% 2% 3% 4% 5%
1 0.9901 0.9804 0.9709 0.9615 0.9524
2 1.9704 1.9416 1.9135 1.8861 1.8594
3 2.9410 2.8839 2.8286 2.7751 2.7232
4 3.9020 3.8077 3.7171 3.6299 3.5460
5 4.8534 4.7135 4.5797 4.4518 4.3295
6 5.7955 5.6014 5.4172 5.2421 5.0757
7 6.7282 6.4720 6.2303 6.0021 5.7864
8 7.6517 7.3255 7.0197 6.7327 6.4632
9 8.5660 8.1622 7.7861 7.4353 7.1078
10 9.4713 8.9826 8.5302 8.1109 7.7217
提示说明
数据保证,1≤n,i≤501 \leq n,i \leq 501≤n,i≤50。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n,m;
cin>>n>>m;
double pvifa;
for(ll i=0;i<=n;i++)
{
for(ll j=0;j<=m;j++)
{
if(!i&&j) cout<<"\t"<<j<<"%";
if(i&&!j) cout<<i;
if(i&&j)
{
pvifa=(1-1/pow(1+j*0.01,i))/(j*0.01);
printf("\t%.4lf",pvifa);
}
}
puts("");
}
return 0;
}