调和级数求和公式:1+1/2+1/3+1/4+...+1/n=(㏑n)+γ;
n不太大时直接循环解决:
n太大时用ln(n)+Y(Y=0.57721566490153286060651209)
hdu 4986
#include<cstdio>
#include<cmath> using namespace std; typedef double LD; int n; const int N(1e5+1); LD f[N]; int main(){ for(int i=1;i<N;i++) f[i]=f[i-1]+1.0/i; while(~scanf("%d",&n)) { if(n>=N)printf("%.4lf\n",0.57721566490153286060651209+log(n)); else printf("%.4lf\n",f[n]); } return 0;