zoukankan      html  css  js  c++  java
  • C

    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

    坑点:

    1.输出第一个样例时可以是1.0000000000

    2.对于double类型的数据进行除法时要采用1.0/i的形式,否则结果会有误差

    题解:

    调和级数公式:f(n) = ln(n) + C + 1.0/2*n;

    其中C是欧拉常数其值等于C ≈ 0.57721566490153286060651209;

    对于较小的数据公式的误差会比较大,所以对于前10000个数据采用打表的方法来求解

    AC代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 const double C = 0.57721566490153286060651209;  //欧拉常数
     5 
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     double a[10005];
    11     int t, n;
    12     int flag = 0;
    13     scanf("%d", &t);
    14     a[0] = 0;
    15     for(int i = 1; i <= 10000; i++)
    16     {
    17         a[i] = a[i-1] + 1.0/i;
    18     }
    19 
    20     while(t--)
    21     {
    22         scanf("%d", &n);
    23         if(n <= 10000)
    24             printf("Case %d: %.10lf
    ", ++flag, a[n]);
    25         else
    26         {
    27             double sum;
    28             sum = log(n) + C + 1.0/(2*n); //这里是1.0不然的话算的结果有偏差
    29             printf("Case %d: %.10lf
    ", ++flag, sum);
    30         }
    31 
    32     }
    33 
    34     return 0;
    35 }
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    字符转int 的几种方法
    递归在类中的写法
    修改多维才智的名字
    max中用 .net 判断输入的邮箱地址是否合格。
    找处场景中同名称的结点
    Android Button [ 学习笔记 一 ] 原创
    Android中Listview注意事项
    Android 移动开发一本就够学习笔记一
    ListActivity 学习[原创]
    在 Eclipse 中导入 Android 示例程序
  • 原文地址:https://www.cnblogs.com/h-hkai/p/8824172.html
Copyright © 2011-2022 走看看