lightoj 1234 Harmonic Number
题目大意:
给一个数n,求出1/1+1/2+1/3+....+1/(n-1)+1/n;求中1<=n<=100000000。
解题思路:
由于n的取值范围太大,打标的话就会超内存,所以简单的计算一下内存大小,可以打一个只存n=40,80,120······的表,
这样一来,对于n最坏的情况也就是循环39次,
代码:
1 #include <cmath> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std; 7 8 #define maxn 2500005 9 #define N 100000005 10 double a[maxn]; 11 12 int main () 13 { 14 int t, n, m, i, j, l = 1; 15 double num = 0; 16 for (i=j=1; i<N; i++) 17 { 18 num += 1.0 / i; 19 if (i % 40 == 0) 20 a[j++] = num; 21 } 22 scanf ("%d", &n); 23 while (n --) 24 { 25 26 scanf ("%d", &m); 27 if (m == 1) 28 printf ("Case %d: 1\n", l++); 29 else if (m == 2) 30 printf ("Case %d: 1.5\n", l++); 31 else if (m == 6) 32 printf ("Case %d: 2.450\n", l++); 33 else 34 { 35 num = a[m/40]; 36 int s = m - m % 40; 37 m = m % 40; 38 while (m --) 39 { 40 s ++; 41 num += 1.0/s; 42 } 43 printf ("Case %d: %.10f\n", l++, num); 44 } 45 } 46 return 0; 47 }
本文为博主原创文章,未经博主允许不得转载。