C++ Zoj1045 HangOver

C++ Zoj1045 HangOver

题目大意:

 输入:

       输入一组测试数据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;
}

运行结果:

C++ Zoj1045 HangOver

 

相关文章: