Given an integer n, we only want to know the sum of 1/k^2 where k from 1 to n.
Input
There are multiple cases.
For each test case, there is a single line, containing a single positive integer n.
The input file is at most 1M.
Output
The required sum, rounded to the fifth digits after the decimal point.
Sample Input
1
2
4
8
15
Sample Output
1.00000
1.25000
1.42361
1.52742
1.58044
题意
就是简单的从1 + 1/2^2 + 1/3^2 + … + 1/n^2。
思路
如果单纯的暴力解题肯定会超时。所以我们这里用打表的方法。先把各个n的值所对应的结果存贮起来,再进行调用。
AC代码
#include<stdio.h>
#include<math.h>
double a[1000005];
int main ()
{
double k, sum = 0;
for(int i = 1; i <= 1000000; i++)
{
k = 1.0 / pow(i, 2);
sum += k;
a[i] = sum;
}
long long n;
while(scanf("%d",&n)!=EOF)
{
if(n < 1000000)
printf("%.5lf\n",a[n]);
else
printf("1.64493\n");//当n大于7位数的时候,它算出来的结果就是一个固定的值,即1.64493
}
}
//总结:这题的难点是处理大数据的问题,因为这个数据非常大,所以需要找到规律,即一位一位的位数去找,当趋向于很大的时候,这题的结果必然趋向一个恒定的值。