1.题目链接
2.题意描述
输入正整数k,计算 S n = 1 + 1 2 + 1 3 + … + 1 n S_n=1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n} Sn=1+21+31+…+n1,求出一个最小的n,使得 S n > k S_n>k Sn>k
3.样例解读
- 样例:输入1,由于 1 + 1 2 > 1 1+\frac{1}{2}>1 1+21>1,所以根据题意输出最小的n为2
4.解题思路
此题目很好理解,只需要配合while循环,不断计算
1
+
1
2
+
1
3
+
…
+
1
n
1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n}
1+21+31+…+n1直到其得到的值大于输入的k,将对应的n输出即可
需注意的是:在求和时所得到的值应该是小数,需使用double,不然精度不够
5.代码实现
#include<iostream>
using namespace std;
int k,i=1;
double sn;
int main( ){
cin>>k;
while(sn<=k){
sn+=1.0/i; //一定是1.0,否则值为整数
i++;
}
cout<<i-1; //由于按照循环流程执行完求和后会进行i++,如符合条件,此时i应该减1
return 0;
}