-
时间:2016-04-21 22:18:26 星期四
-
题目编号:[2016-04-21][light]OJ[1234][Harmonic Number]
-
题目大意:求∑nk=11kn∈(1,108),精确到10?8求∑k=1n1kn∈(1,108),精确到10?8
-
分析:
- 想法是打表,然后输出,但是直接打表会爆内存
- 解决办法,就是每隔100个来打表,节省1100的空间,然后从那个值开始计算到当前值解决办法,就是每隔100个来打表,节省1100的空间,然后从那个值开始计算到当前值
- 对应的整百就是n100,那么那个值对应的位置就是n100×100对应的整百就是n100,那么那个值对应的位置就是n100×100,
#include<cstdio>
using namespace std;
const int maxn = 1E8 + 10;
double a[maxn / 100 + 10];
void ini(){
double cur = 0;
for(int i = 1 ; i <= 1E8 ;++i ){
cur += double(1)/i;
if(i % 100 == 0) a[i/100] = cur;
}
}
int main(){
ini();
int t,cntcase = 0;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
double cur = a[n / 100];
for(int i = n / 100 * 100 + 1;i <= n ; ++i){
cur += double(1) / i;
}
printf("Case %d: %.10lf\n",++cntcase ,cur);
}
return 0;
}
时间: 2024-12-13 09:39:54