LightOJ 1234 Harmonic Number
Description
In mathematics, the nth harmonic number is the sum of the reciprocals of the first n natural numbers:
In this problem, you are given n, you have to find Hn.
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case starts with a line containing an integer n (1 ≤ n ≤ 108).
Output
For each case, print the case number and the nth harmonic number. Errors less than 10-8 will be ignored.
Sample Input
12
1
2
3
4
5
6
7
8
9
90000000
99999999
100000000
Sample Output
Case 1: 1
Case 2: 1.5
Case 3: 1.8333333333
Case 4: 2.0833333333
Case 5: 2.2833333333
Case 6: 2.450
Case 7: 2.5928571429
Case 8: 2.7178571429
Case 9: 2.8289682540
Case 10: 18.8925358988
Case 11: 18.9978964039
Case 12: 18.9978964139
思路:就是求Hn那个公式的和 直接暴力会超内存 只存n/50个数就可以了 需要哪个数再算就好了
#include <iostream> #include <math.h> #include <stdio.h> const int N=1e8+10; using namespace std; double a[N/50+10]; int main() { int i,n,t,k=1; double sum=1.0; a[0]=0.0; a[1]=1.0; for(i=2;i<=N;i++) { sum+=1.0/double(i); if(i%50==0) a[i/50]=sum; } cin>>t; while(t--) { cin>>n; int b=n/50; double ans=a[b]; for(i=b*50+1;i<=n;i++) ans+=1.0/double(i); printf("Case %d: %.10lf\n",k++,ans); } return 0; }