题解
数字2出现的次数
1 条题解
-
0
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