Cure HDU - 5879 (打表预处理)

Cure

Problem Description

Given an integer n, we only want to know the sum of 1/k^2 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

题意:

 给出K值,然后输出1 / x^2的和 (x取值从1到k)

因为题目并没有给出k的范围,所以可能会给出很大很大很大的数!

所以肯定需要用字符数组先接收这个很大很大很大的k

然后注意:题目要求结果保留小数点后5位就可以

我们可以知道当k>=某个数之后,小数点后五位的数都不会再变了

我试出来的那个数是110292,所有大于等于110292的数。输出固定为1.64493

所以为了准确,当一个数位数>=7位,就不必再计算,输出都为1.64493.

代码: 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; 
const int N=1e6+5;  //1000005
double ans[N];  //将每个数所产生的结果直接存储 
char s[N]; 
int n;
int main()
{
	ans[0]=0;
    for(int i=1;i<N;i++){
        ans[i]=ans[i-1]+1.0/(1.0*i*i);
    }
	while(scanf("%s",s)!=EOF)
	{ 
	    n=0;
	    int len=strlen(s);
	    if(len>=7)printf("1.64493\n");  //因为k>=110292之后,都固定为1.64493了 
	    else
	    {
	    	for(int i=0;i<len;i++)
		    {
		    	n=n*10+(s[i]-'0'); 
			}
			printf("%.5lf\n",ans[n]); 
		} 	  
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值