题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1234
题意:求下面这个Hn。
题解:哈哈哈哈哈,这又是一个高数调和级数啦。前面就打表啊。当数字很大的时候可以用公式。
截图自百度百科,就是很大的时候公式就是 lnk+1/2k+C这个C是欧拉常数。C = 0.57721566490153286060651209。反正我记不住。
1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 using namespace std; 5 const double C = 0.57721566490153286060651209; 6 double num[10000]; 7 8 void init(){ 9 num[1] = 1; 10 for(int i = 2 ; i < 10000; i++){ 11 num[i] = num[i-1] + 1.0 / i; 12 } 13 } 14 int main(){ 15 init(); 16 int T; 17 cin>>T; 18 int t = 1; 19 while(T--){ 20 int n; 21 cin>>n; 22 if(n < 10000){ 23 printf("Case %d: %.10lf ",t,num[n]); 24 t++; 25 } 26 else{ 27 double ans = log(n) + C + 1.0 / (2*n); 28 printf("Case %d: %.10lf ",t,ans); 29 t++; 30 } 31 } 32 return 0; 33 }