1.00 3.71 0.04 5.19 0.00
样例输出
3 card(s)
61 card(s)
1 card(s)
273 card(s)
注意点:
1.判断一个浮点数是否为0,应该使用,这个数字和大于0且一个比较小的数字来比较,例如这里用的是1e-4,也就是10的-4次方,或者用10的-5次方也可以,
2.这里求浮点数的和,最好使用double这样比较精确,
3.关于==问题,应该选择大于,不应该有相等的条件,
代码实现:
#include<iostream>
#include<cmath>
using namespace std;
int HarmonicSequence(double x) { //求不超过x的调和数列的最大值
double sum = 0;
int n = 2;
do {
sum += 1.0 / n;
n++;
} while (x > sum);
n--;
return n - 1;//返回符合条件的最大n的值,因为这里的n对应的是题目中的n+1,所以这里返回n就可以了,
}
int main() {
double x;
cin >> x;
while (fabs(x) > 1e-4) {
cout << HarmonicSequence(x) << " card(s)\n";
cin >> x;
}
return 0;
}
原文:https://www.cnblogs.com/Jerry-Long/p/14481739.html