每日学习一算法【1】统计数字问题

来源:互联网 发布:宜宾网络电视台 编辑:程序博客网 时间:2024/05/18 03:46

问题描述:一本书的页码从自然数1开始顺序编码直到自然数n。书的页码按照通常习惯编排,没个页码都不含有多余的前导数字0.例如,第6页用数字6表示,而不是06或者006等。要求计算书的全部页码中分别用到多少次数字x(x=1,2,3……9)。

详细解释

// 计算数字 X 在 1-n 中出现的次数。int count(int n, int x) {    int cnt = 0, k;    for (int i = 1;k = n / i;i *= 10) {        // 高位的数字。        int high = k / 10;        if (x == 0) {            if (high) {                high--;            } else {                break;            }        }        cnt += high * i;        // 当前位的数字。        int cur = k % 10;        if (cur > x) {            cnt += i;        } else if (cur == x) {            // n - k * i 为低位的数字。            cnt += n - k * i + 1;        }    }    return cnt;}


0 0
原创粉丝点击