,打表发现n>=1e6后收敛于1.64493,可能输入的时候大数,用字符串处理,长度小于1e6的话打表,之后固定输出。
#include<cstdio>
#include<iostream>
using namespace std;
const int N=1e6+5;
double sum[N];
string n;
void init(){
sum[0]=0;
for(int i=1;i<=1e6;i++)
sum[i]=sum[i-1]+double(1.0/i/i);
}
int main(){
init();
while(cin>>n){
if(n.size()>=7)
printf("%.5lf\n",sum[1000000]);
else{
int s=0;
for(int i=0;i<n.size();i++)
s=s*10+n[i]-'0';
printf("%.5lf\n",sum[s]);
}
}
return 0;
}