lightoj1234 打表技巧:分块打表

/*
打不了那么大的表,所以只记录分块的信息即可 
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000005
double arr[maxn];
void init(){
    arr[0]=0;
    double tmp=0;
    for(int i=1;i<maxn*100;i++){
        tmp=tmp+1.0/i;
        if(i%100==0)arr[i/100]=tmp;
    }
}
int main(){
    init();
    int n,T,cas=0;
    cin>>T;
    while(T--){
        cin>>n;
        int pos=n/100,now=n%100;
        double ans=arr[pos];
        for(int i=1+pos*100;i<=n;i++)
            ans+=1.0/i;
        printf("Case %d: %.10lf\n",++cas,ans);
    }
} 

 

posted on 2019-02-20 13:12  zsben  阅读(261)  评论(0编辑  收藏  举报

导航