题意:
求1/1+1/2+1/3+……+1/n的和。n<=1e8,T<10000
思路:
询问较多询问简单就是求个和,所以首先想到打表,但是1e8的double型必然mle,所以就分区域打表,1e6一定能够存下,所以每100个数字存一下,然后询问时就是在这个基础上最多在查100个数。简单打表题。代码:
#define N 1123456
#define M 100000005
int n,m;
int flag,sum,ave,ans,res,len,ans1,ans2;
double a[N],b[N];
void init()
{
double t=0;sum=1;
a[0]=0;
for(int i=1;i<M;i++)
{
t+=(1.0/i);
if(i%100==0)
a[sum++]=t;
}
}
int main()
{
int i,j,k,kk,t,x,y,z;
init();
scanf("%d",&k);
kk=0;
while(k--)
{
scanf("%d",&n);
x=n/100;y=n%100;
double res=a[x];
for(i=x*100+1;i<=n;i++)
res+=(1.0/i);
printf("Case %d: %.10lf\n",++kk,res);
}
return 0;
}