Description
求调和级数前k项之和(1+1/2+1/3+...+1/k),输入整数k>0,输出两种调和级数前k项和, 前一种是从左到右求和;后一种是从右到左求和(使用双精度double类型精确到小数点后14位)。
输入格式
实验输入数据格式 m(整数,实验数据总数) k1(整数,调和级数项数) k2(整数,调和级数项数) ... km(整数,调和级数项数)
输出格式
实验输出数据格式 x1(实数,k1项调和级数从左到右求和) y1(实数,k1项调和级数从右到左求和) x2(实数,k2项调和级数从左到右求和) y2(实数,k2项调和级数从右到左求和) ... xm(实数,km项调和级数从左到右求和) ym(实数,km项调和级数从右到左求和)
输入样例
3 10 100 1000
输出样例
2.92896825396825 2.92896825396825 5.18737751763962 5.18737751763962 7.48547086055034 7.48547086055034
#include<cstdio>
#include<cmath>
int main()
{
int n=0;
int k=0;
double result=0;
double result2=0;
double rt[100];
double rT[100];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&k);
for(double i=1;i<=k;i++){
result = (1/i)+result;
}
for(double i=k;i>=1;i--){
result2 = (1/i)+result2;
}
rt[i] = result;
rT[i] = result2;
result = 0;
result2 = 0;
}
for(int i=0;i<n;i++){
if(i==n-1) printf("%.14f %.14f",rt[i],rT[i]);
else printf("%.14f %.14f\n",rt[i],rT[i]);
}
return 0;
}