【HDU - 5879 】【Cure 】

题目:

Given an integer nn, we only want to know the sum of 1/k21/k2 where kk from 11 to nn.

Input

There are multiple cases. 
For each test case, there is a single line, containing a single positive integer nn. 
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

题意:求解从1--n的  1/k*k的和,然后保留五位小数输出。

解题思路:先打表预处理一下,然后坑点就来了,n的输入的话,应该是用字符串输入,因为它可能会很大,否则会一直RE,还注意的就是不用求到无穷,只需要跑到120000,之后增加值近乎为0,直接输出就好。

ac代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1200008
typedef long long ll;
double num[maxn];
void db()
{
	num[0]=0;
	for(ll i=1;i<=maxn;i++)
		num[i]+=(double)(1.0/(i*i))+num[i-1];
}
int main()
{
	int n;
	db();
	string s;
	while(cin>>s)
	{
		n=0;
		int flag=0;
		for(int i=0;i<s.size();i++)
		{
			n=n*10+s[i]-'0';	
			if(n>120000)
			{
				flag=1;
				break;
			}
		}
		if(flag)
		{
			printf("%.5lf\n",num[120000]); 
		}
		else
			printf("%.5lf\n",num[n]); 
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值