对于调和级数 f(n) = 1/1+1/2+...+1/n 在 n 较小的时候没有公式,当n较大(大于一万)
f(n)≈ln(n)+C+1/2*n 欧拉常数值:C≈0.57721566490153286060651209
#include <bits/stdc++.h>
using namespace std;
const double r = 0.5772156649015328606065;
double ans[10001];
int main()
{
int t,n,cnt=1;
for(int i=1;i<=10000;i++){
ans[i] = ans[i-1] + 1/(double)i;
}
scanf("%d",&t);
while(t--){
scanf("%d",&n);
if(n<=10000){
printf("Case %d: %.10lf\n",cnt++,ans[n]);
}else{
printf("Case %d: %.10lf\n",cnt++,log((double)n)+r+1/(2*(double)n));
}
}
return 0;
}