题目描述
已知:Sn=1+1/2+1/3+…+1/n。显然对于任意一个整数k,当n 足够大的时候,Sn>k。
现给出一个整数k,要求计算出一个最小的n,使得Sn>k。
输入格式
一个正整数k。
输出格式
一个正整数n。
输入输出样例
输入 #1
1
输出 #1
2
【数据范围】
对于100% 的数据,1≤k≤15。
【题目来源】
NOIP 2002 普及组第一题
题目的解法思路很简答,只要一个级数和小于所输入的数向上加,但是为什么最开始就是只有60分!反复思考查找,问题出现在精度上!毕竟这种级数求解越往后加的就越小,越需要更小的精度,区区float已经不足以满足它了!
贴上代码
#include<stdio.h>
int main(){
double k = 0;
int n = 1;
double s = 0;
scanf("%lf",&k);
while(1){
if(s <= k){
s = s + 1.0/n;
n++;
}else{
break;
}
}
printf("%d\n",n-1);
return 0;
}