题目大意:
输入:
输入一组测试数据c,c的取值范围位:0.01~5.20(c包含3个数字)
输出:
每张卡片的长度分别为:1/2 1/3 1/4 1/5 …. 1/(n+1)
卡片: 1 2 3 4 ... n
然后对于每组测试数据c,看1/2 + 1/ 3 + 1/4 ….的和什么时候大于c时,输出此时所需卡片的数量
实现程序:
#include <iostream>
using namespace std;
int main()
{
int n;
double sum, c;
while (cin >> c && (c - 0 > 1e-6)) {
// 实数在计算机中存在误差,所以可以通过该数的绝对值(fabs)是否
// 小于很小的数(如10的-6次方),如果小于这个数就说明它等于0,
// 结束程序;否则大于0,继续执行程序
// 也可以用fabs(c-0) > 1e-6,因为c为正数,所以我省了fabs
int i = 0;
sum = 0;
for (n = 2; sum - c < 1e-6; n++) {
// sum - c < 1e-6 表示: sum < c,当sum >= c时结束
// 1/2 + 1/3 + 1/4 + ... + 1/(n + 1)
sum += (double)1 / n; // sum += 1.0 / n;
i++;
}
cout << i << " card(s)" << endl;
}
return 0;
}
运行结果: