ybt1918 级数求和(NOIP2002普及组第1题)
时空限制 1000ms/64MB
题目描述
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
输入
一行,一个正整数K。
输出
一行,一个整数n。
样例输入
1
样例输出
2
代码
法一:while
#include<iostream>
using namespace std;
int main(){
int k,n=0;
double sum=0.0;
cin>>k;
while (sum<=k){
n++;
sum += 1.0/n;
}
cout<<n<<endl;
return 0;
}
法二:for
#include<iostream>
using namespace std;
int main(){
int k,n;
double sum=0.0;
cin>>k;
for (n=1; sum<=k; ++n)
sum += 1.0/n;
cout<<n-1<<endl;
return 0;
}