链接
题意
求sum(1/k^2),k可能非常大。
题解
容易观察出当k特别大的时候,提供的贡献微乎其微,保留5位小数的话,到某个阶段基本上不会再增长了,找到那个值就好了。
代码
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long lint;
#define maxn (10000000)
char in[maxn];
int main()
{
#define limit (200000)
/*
double o = .0;
for(int k = 1; k <= limit; k++)
{
o += 1.0 / k / k;
}
printf("%.5f\n", o);
*/
char ans[10] = "1.64493";
while(gets(in))
{
int len = strlen(in);
if(len > 6) printf("%s\n", ans);
else
{
int num = 0;
for(int i = 0; i < len; i++)
{
num *= 10;
num += int(in[i] - '0');
}
if(num >= limit) { printf("%s\n", ans); }
else
{
double ans = 0;
for(int k = 1; k <= num; k++)
{
ans += 1.0 / k / k;
}
printf("%.5f\n", ans);
}
}
}
return 0;
}