/***********
内存有限的时候间隔打标
*************/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e6+5;
double H[maxn];
int main(void)
{
double ret = 0;
for(int i = 1;i <= 100000000;i++)
{
ret +=1.00/i;
if(i%50 == 0)
{
H[(int)(i/50)] = ret;
}
}
ios_base::sync_with_stdio(false);
int T, cnt = 0;
cin>>T;
while(T--)
{
int n;
cin>>n;
if(n%50 ==0)// 整除 直接输出表中答案
{
printf("Case %d: %.8lf\n", ++cnt, H[n/50]);
}
else// 否则 接着 小于他并且距他最近的一个答案 继续计算
{
int i = n/50*50+1;
double ans = H[i/50];
for(;i <= n;i++)
{
ans += 1.0/i;
}
printf("Case %d: %.8lf\n", ++cnt, ans);
}
}
return 0;
}
LightOJ-1234(数论——水题——打表)
最新推荐文章于 2020-11-02 19:20:02 发布