Harmonic Number(暴力求解法)

来源:互联网 发布:改图软件app 编辑:程序博客网 时间:2024/06/05 06:55

题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/D;

题意:就是求解Harmonic Numbe值 即求    中的Hn;

分析:本题重在打表,因为个数很大(1亿),所以要分成小份进行存储(好不麻烦);剩下的就可以循环很少次数了。假设分成2500000分设为数组s,就是每隔40个数记录一次,接下来给出x如果是40的倍数,直接输出s[x/40],否则,则从x/40*40开始循环至x

代码如下:

#include <set>#include <map>#include <stack>#include <queue>#include <math.h>#include <vector>#include <utility>#include <string>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <functional>using namespace std;double s[3000000];int main(){    double a=0;    int k=0;    s[0]=0;    for(int i=1;i<=100000004;i++){        a+=1/(double)i;        if(i%40==0)//我分成了40个,下面循环的时候只需循环19次        s[++k]=a;    }    int n;    k=1;    cin>>n;    while(n--){        int x;        cin>>x;        int m=x/40;//        cout<<m<<endl;        double sum=s[m];        for(int i=m*40+1;i<=x;i++){            sum+=1/(double)i;        }        printf("Case %d: %.10lf\n",k++,sum);    }    return 0;}


1 0
原创粉丝点击