题意:给定一个数n,求1到n中的每一项的平方分之一的累加和。
题解:题目没有给数据范围,而实际上n很大很大超过long long。因为题目只要求输出五位小数,我们发现当数大到一定程度时值是固定的 pi*pi/6。小的打表就行了,这里打表为了防止爆内存我用了优化的方法,类似于我之前写的light oj 1234。
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <cstring>
const int N=1e7+;
using namespace std;
const double pi=acos(-);
double a[N/+];
char c[];
int main()
{
int i,t,k=;
long long n;
double cnt=pi*pi/6.0;
double sum=1.0;
a[]=0.0;
a[]=1.0;
for(i=;i<=N;i++)
{
sum+=1.0/(double(i)*double(i));
if(i%==)
a[i/]=sum;
}
while(scanf("%s",c)!=EOF)
{
int len=strlen(c);
if(len>=) printf("%.5f\n",cnt);
else
{
n=;
for(int i=;i<len;i++)
n=n*+(c[i]-'');
//cout<<n<<"****"<<endl;
long long b=n/;
double ans=a[b];
for(i=b*+;i<=n;i++)
ans+=1.0/(double(i)*double(i));
printf("%.5f\n",ans);
}
}
return ;
}