题目大意:给你一个n,让你求1/1+1/2+1/3+..1/n
思路:因为n的值达到了1e8,内存不够,可以每隔50项纪录一下。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn = 1e8+5;
double sum[maxn/50+5];
void init()
{
sum[0] = 0;
double t = 0;
for(int i = 1; i <= maxn; i++)
{
t += 1.0/i;
if(i%50 == 0)
sum[i/50] = t;
}
}
int main()
{
int T, n;
init();
scanf("%d", &T);
for(int kase = 1; kase <= T; kase++)
{
scanf("%d", &n);
int t = n / 50;
double ans = sum[t];
for(int i = t*50+1; i <= n; i++)
ans += 1.0/i;
printf("Case %d: %.10lf\n", kase, ans);
}
return 0;
}