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
题意:
给出n,计算1/i*i (1<=i<=n)的和,保留5位小数
思路:
打表,有极限,大于n=1000000时,保留的五位小数就不会再有变化了
代码:
#include<iostream>
#include<cmath>
using namespace std;
double sum[1000005];
void init(){
for(int i=1;i<=1000000;i++){
sum[i]=1/(i*1.0*i*1.0)+sum[i-1];
}
}
int main(){
init();
string s;
while(cin>>s){
if(s.length()<=7){
int n=0;
for(int i=0;i<s.length();i++)
n=n*10+s[i]-'0';
printf("%.5lf\n",sum[n]);
}
else{
cout<<"1.64493"<<endl;
}
}
return 0;
}