HDU 5879-Cure(1/n^2之和)

来源:互联网 发布:大连软件培训班 编辑:程序博客网 时间:2024/05/02 20:38

Cure

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1274    Accepted Submission(s): 429


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
124815
 

Sample Output
1.000001.250001.423611.527421.58044
 

Source
2016 ACM/ICPC Asia Regional Qingdao Online
 

Recommend
wange2014   |   We have carefully selected several similar problems for you:  5900 5899 5898 5897 5896 

题目意思:

求1/1^2到1/n^2之和,保留5位小数点。

解题思路:

打表预处理,搜出前2000000,因为是保留5位小数点所以较大的数直接近似成(π^2)/6,即1.64493。

#include<cstdio>#include<iostream>#include<vector>#include<cmath>#include<cstring>#include<queue>#include<algorithm>#include<set>#include<queue>#define INF 0xfffffffusing namespace std;const int maxn=2000000;typedef long long ll;double a[maxn];char s[maxn*10];void f()//打表{    a[0]=a[1]=1;    for(int i=2; i<=maxn; ++i)        a[i]=1/pow(i,2)+a[i-1];}int main(){    f();    long long n;    while(~scanf("%s",s))    {        if(strlen(s)<=7)        {            sscanf(s,"%I64d",&n);//取最大I64d长度的字符串s转换存入长整型n            if(n<=1000000)                printf("%.5lf\n",a[n]);            else                printf("1.64493\n");//六分之π平方        }        else            printf("1.64493\n");    }    return 0;}


 
0 0
原创粉丝点击