Interest | ||
[ Submit Code ] [ Top 20 Runs ] [ Runs Status ] | ||
Acceteped : 788 | Submit : 1687 | |
Time Limit : 1000 MS | Memory 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;
}