在数学中,第n个调和数是前n个自然数的倒数之和:
Hn=1+1/2+1/3+1/4+…+1/n;
在这个问题中,给你一个数n,你应该求出 Hn.注意:这个OJ数组开太大会报Runtime Error.
Input
开始输入一个整数 T (≤ 10000), 代表样例个数.
每一个样例输入一行,包含一个整数 n (1 ≤ n ≤ 108).
Output
对于每个样例输出一行,代表答案Hn 。输出的结果与标准答案的相对误差小于 10-8 ,格式如下.
Sample Input
12
1
2
3
4
5
6
7
8
9
90000000
99999999
100000000
Sample Output
Case 1: 1.0000000000
Case 2: 1.5000000000
Case 3: 1.8333333333
Case 4: 2.0833333333
Case 5: 2.2833333333
Case 6: 2.4500000000
Case 7: 2.5928571429
Case 8: 2.7178571429
Case 9: 2.8289682540
Case 10: 18.8925358988
Case 11: 18.9978964039
Case 12: 18.9978964139
50分一组,总数据200W
代码如下:
#include<cstdio>
using namespace std;
double a[100000000/50+10];
int main(){
double s=0;
int e=100000001;
for(int i=1;i<e;i++){
s+=(1.0/i);
if(i%50==0)a[i/50]=s;
}
a[0]=0;
int T;
scanf("%d",&T);
int j=0;
while(T--){
int n;
j++;
scanf("%d",&n);
printf("Case %d: ",j);
int t=n/50;s=a[t];
for(int i=t*50+1;i<=n;i++){
s+=(1.0/i);
}
printf("%.10lf\n",s);
}
return 0;
}