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
题意:给出一个 n,求出 1 到 n 的1/(n^2)的和。
我是通过打表找出了后面的一个临界值,过界后得数就不变了,前面的直接计算,不过可以将已经计算出来的保存一下, 这样快一点。
#include <cstdio>
#include <cstring>
double num[130000] = {0};
char str[100000+5];
int main()
{
long long n;
num[1] = 1;
while (scanf("%s", str) != EOF)
{
n = 0;
int cur = 0;
while (str[cur] == '0')
cur++;
int len_true = strlen(str);
int len_false = len_true - cur;
if (len_false > 6)
{
printf("1.64493\n");
continue;
}
for (int i = cur; i < len_true; ++i)
{
n *= 10;
n += str[i] - '0';
}
if (n >= 123964)
{
printf("1.64493\n");
continue;
}
double x;
double ans = 0;
for (long long i = n; i > 0; --i)
{
if (num[i] != 0)
{
ans += num[i];
break;
}
x = (double)1/i/i;
ans += x;
}
num[n] = ans;
printf("%.5lf\n", num[n]);
}
return 0;
}
本文介绍了一个计算从1到n的1/n^2之和的算法实现,通过对特定数值范围内的求和结果进行预先计算并存储,提高了算法效率。对于大于特定阈值的n值,直接返回预设的收敛值。
243

被折叠的 条评论
为什么被折叠?



