HDU-5879 Cure(精度)(极限)

来源:互联网 发布:城口综合数据库中标 编辑:程序博客网 时间:2024/05/17 10:43

Cure

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


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


首先要知道∑1/(i*i)有极限,所以计算到一定数值以后结果会不再变化(小数点后后5位),然后找到边界1e6。

注意1M的输入。and atoi()

//下面盗用队友代码

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;char str[10000005];int main(){    while(~scanf("%s",str))    {        int len = strlen(str);        double tosum = 0;        if(len <= 6)        {            if(len < 6 || str[0] == '1')            {                int n = atoi(str);                for(int i = 1;i <= n;i++)                {                    double tmp = i;                    tosum += 1/(tmp*tmp);                }                printf("%.5f\n",tosum);            }            else                printf("1.64493\n");         }         else if(len > 6)                printf("1.64493\n");    }    return 0;}


0 0