Bootstrap

年金现值系数表

[NICA #1] 年金现值系数表

题目描述

小 A 最近在研究财务事项。

在财务计算中,年金现值系数是一个常用概念。它定义, P V I F A ( 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],其中 i i i 表示每期利率, n n n 表示年金支付天数。例如, P V I F A ( 5 % , 10 ) = [ 1 − ( 1 + 5 % ) − 10 ] 5 % = 7.7217 \mathrm{PVIFA}(5\%,10)=\dfrac{[1-(1+5\%)^{-10}]}{5\%}=7.7217 PVIFA(5%,10)=5%[1(1+5%)10]=7.7217。你不必在意 P V I F A \mathrm{PVIFA} PVIFA 的具体含义。

小 A 希望你能把年金现值系数以表格的形式打印出来,方便他快速查阅。具体而言,你应该输出一张表格,纵轴表示期数,横轴表示每期利率。如下图:

输入格式

输入一行,两个正整数 n n n i i i,表示表格中需要绘制的行数和列数。

输出格式

输出 n + 1 n+1 n+1 i + 1 i+1 i+1 列的图表。规定如下:

  • 第一行第一列为 \t
  • 第一行第二列起往后一共 i i i 个位置,依次输出 1 % , 2 % , … , i % 1\%,2\%,\dots,i\% 1%,2%,,i%,以 \t 作为分隔符;
  • 第二行第一列起往下每行的第一列,依次输出 1 , 2 , … n 1,2,\dots n 1,2,n,与后面的内容以 \t 作为分隔符。
  • 第二行第二列开始,设当前为第 a a a 行第 b b b 列,则只需输出 P V I F A ( ( b − 1 ) % , a − 1 ) \mathrm{PVIFA}((b-1)\%,a - 1) PVIFA((b1)%,a1) 保留四位小数的值,以 \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 ≤ 50 1 \leq n,i \leq 50 1n,i50

代码内容

// #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;
}
;