原题地址
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]); //输出打好的表中数据
}
}
}
打表+特殊处理