1 条题解

  • 0
    @ 1990-1-22 9:14:20

    【深基5.习1】梦中的统计

    解题思路

    枚举 M~N,每个数反复取模 10 得到末位数字并计数,然后整除 10 去掉末位。

    正确性说明

    每次恰好统计一个十进制数位,直到数值变为 0;枚举所有整数得到每个数字出现总次数。

    易错点

    统计的是出现次数,同一个数内重复数字也要多次累计;不用补前导零。

    复杂度

    区间长度 k、最大数字位数 D,时间 O(kD),空间 O(1)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        long long m, n;
        cin >> m >> n;
        long long cnt[10] = {};
        for (long long i = m; i <= n; i++) {
            long long x = i;
            do {
                cnt[x % 10]++;
                x /= 10;
            } while (x);
        }
        for (int d = 0; d < 10; d++) {
            if (d)
                cout << " ";
            cout << cnt[d];
        }
        cout << "\n";
        return 0;
    }
    
    • 1