Cure
Problem Description
Given an integer
n
, we only want to know the sum of
1/k2
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到n方分之一求和
解题思路
当n很大的时候趋近于π*π/6,n较小时手动算
通过打表尝试,找到差不多当n>110300时就会大于等于π*π/6
所以小的时候打表,打的时候直接输出
代码
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
double a[120000];
char s[10000000];
int main()
{
int i;
for(i=1;i<=110300;++i)
{
a[i]=1.0/i/i; //写成 1.0/(i*i)出错
}
for(i=2;i<=110300;++i)
a[i]+=a[i-1];
while(scanf("%s",s)==1)
{
int len=strlen(s);
if(len>=7)
puts("1.64493");
else
{
int n=0;
for (int i = 0; i < len; i++)
{
n = n * 10 + s[i] - '0';
}
if(n>=110300) puts("1.64493");
else printf("%.5f\n",a[n]);
}
}
return 0;
}