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); } }