LightOJ

Time Limit: 3000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu

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

Source

Problem Setter: Jane Alam Jan
/**
          题意:如题
          做法:因为n为1e8比较大,然后可以进行打表,每100个存储,然后在进行剩余的
**/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
#include <queue>
const int  maxn = 1e8 + 110;
using namespace std;
double  mmap[maxn/100+10];
void init()
{
    mmap[0] = 0;
    mmap[1] = 1;
    double sum = 1.0;
    for(int i=2;i<=maxn;i++)
    {
        sum += 1.0 / (i*1.0);
        if(i % 100 == 0) mmap[i/100] = sum;
    }    
}
int main()
{
    int Case = 1;
    int T;
    scanf("%d",&T);
    init();
    while(T--)
    {
        long long n;
        scanf("%lld",&n);
        int res = n/100;
        double tot = mmap[res];
        for(int i=res*100+1;i<=n;i++)
        {
            tot += (1.0)/(i*1.0);
        }
        printf("Case %d: %.10f
",Case++,tot);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/chenyang920/p/4474730.html