• 小数的编程


    1. 有限小数

    比如 3/8=0.375,打印该小数的形式:

    // a >= 0, b > 0
    void printDecimal(int a, int b){
        int cnt = 0;
        while (a > 0){
            if (cnt++ == 1) cout << ".";
            cout << a/b;                // 整数部分
            a = (a % b) * 10;
                                        // a % b == 0 时,a 是 b 的倍数
        }
        cout << endl;
    }

    2. 无限(循环)小数

    如果出现 1/11 = 0.09090909…,也即无限循环小数,此时函数将无限次执行下去。可问题在于,两个整数相除,如何确定一个是否为一个无限循环小数呢(不可能为无理数)?

    其实利用鸽洞原理便可得到,a = (a % b) * 10。其中 a%b 的结果总是取 [0, b-1]范围内的整数值。假设执行了 b+1 次还没能终止程序,那么就能断定出,从相同结果第一次出现到第二次出现为止的数就是无限循环的循环小数。

    void printDecimal(int a, int b){
        int cnt = 0;
        while (a > 0){
            if (cnt++ == 0) cout << ".";
            cout << a/b ;
            a = (a % b) * 10;
            if (cnt == b+1)
                break;
        }
    }
  • 相关阅读:
    URL模块之parse方法
    结合GET(),POST()实现一个简单、完整的服务器
    Node.js初探之实现能向前台返回东西的简单服务器
    float和position
    回归博客园·共享onload事件
    百度地图api的用法
    美丽数列
    低位值
    删括号
    牛牛找工作
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423928.html
Copyright © 2020-2023  润新知