HDU #5879 Cure

原题地址
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,k从1~n,求1/k^2的和

输入:多个测试,每次给一个正整数n,输入文件最多1M

输出:输出1/k^2的和,k从1~n,小数点后留5位

思路:明显输入数字会巨大,不作处理必超时,因为只需留5位小数,所以只需找到当n为多少时,五位小数不会再变(因精确度关系,n尽量找大),然后再在这个范围内打表

AC代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
double a[1000005];
int  n,m,b;
char s[30];
int main()
{
	double k,sum=0;
	for(int i=1; i<=1000000; i++)  	//打表
	{
		k=1.0/i;
		sum+=pow(k,2);
		a[i]=sum;
	}
	while(scanf("%s",s)!=EOF)	//输入数字太长,所以用字符串存
	{
		int len=strlen(s);
		if(len>=7)			//字符串长度大于等于7,即该数大于1000000时,五位小数不变
			printf("1.64493\n");	
		else
		{
			n=0;
			for(int i=0; i<len; i++)	//将字符串转成数
				n=n*10+s[i]-'0';
			printf("%.5lf\n",a[n]);	//输出打好的表中数据
		}
	}
}

打表+特殊处理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值