XTU OJ 1182

Interest

Submit Code ] [ Top 20 Runs ] [ Runs Status ]
Acceteped : 788Submit : 1687
Time Limit : 1000 MSMemory Limit : 65536 KB

Description

题目描述

某理财产品的利率计算是按月利率,而且算复利率。先给你一年中12个月每个月的利率,请问这款理财产品的年利率是多少?

输入

第一行是一个整数K,表示样例个数。 以后每行12个整数,表示每月的利率是Xi%。-20≤Xi≤20。

输出

输出一个浮点数,保留3位小数,四舍五入,表示年利率%。

样例输入
1
1 1 1 1 1 1 1 1 1 1 1 1

样例输出
12.683

Sample Input

 

Sample Output

 

Source

题解开始咯:这题要我们计算复利,直接用复利计算公式就行:原文章链接:(74 封私信 / 80 条消息) 如何计算复利? - 知乎 (zhihu.com)​​​​​​

 设本金为1,i的投资回报率看下面的例子就能知道其实就是月利率,n的时间,这里是直接n次方,前提是i每个月都一样,题目给的月利率是不一样的,所以就全部乘起来,最后减去本金就能得到利息,除以本金就能得到利率(因为本金是1,直接忽略)。

还有一个点是round,在c语言round只能返回整数,所以我们要自己搓一个round出来,这里我提供了两种思路(明显第二种更聪明)

代码展示:

#include<stdio.h>
#include<math.h>
#define PI 3.14159265

double round_3(double a){
    double t=a*1000;
    double k=t-(int)t;
    if(k-0.5>=0) return 1.0*((int)t+1)/1000.0;
    else return 1.0*t/1000.0;
}

double round_3_1(double a){// 间接使用了round函数
    return round(a*1000)/1000.0;
}

int main()
{
    int n;
    scanf("%d",&n);
    while(n--){
        double ans=1.0;// 本金为1
        for(int i=0;i<12;i++){
            int mon=0;
            scanf("%d",&mon);
            ans*=(1.0+1.0*mon/100.0);// 按复利公式计算
        }
        printf("%.3lf\n",round_3((ans-1)*100));//四舍五入输出
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值