top1编程
← 返回题目
题解

数字2出现的次数

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    P4419 数字2出现的次数(入门)

    解题思路

    数一数一个整数里数字2出现了几次,比如222里出现了3次2。办法是"逐位拆开":用 n%10 取出当前最右边的一位数(个位),看看它是不是2,是就计数;然后用 n/10 把这个个位砍掉,十位就变成了新的个位。重复"取个位→判断→砍掉"这个过程,直到n变成0为止。为什么 n%10 能取出个位?因为除以10的余数一定是0~9,正好是个位。为什么 n/10 能砍掉个位?因为整数除法会把小数部分丢掉,比如 222/10=22。边界情况:如果n本身就是2,那么 2%10==2,计数1次,再 2/10=0 循环结束,结果1;如果n里面一个2都没有,cnt一直保持0;题目保证n是正整数,所以不用担心n直接是0的情况。

    参考代码

    // 程序用途:逐位拆开正整数n,统计其中数字2出现的次数
    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        int cnt = 0;                    // 计数器,记录2出现的次数
        while (n) {                     // 一直拆到n变成0
            if (n % 10 == 2) cnt++;     // 当前个位是2就计数
            n /= 10;                    // 去掉个位,准备看下一位
        }
        cout << cnt << endl;            // 输出2出现的次数
        return 0;
    }
    

    复杂度分析

    循环每执行一次,n就除以10一次,位数少一位,所以循环次数正好等于n的位数。n<100000最多6位,时间复杂度 O(位数),也可以说 O(log n);额外空间复杂度 O(1)。

    • 1