jz43.1~n整数中1出现的次数

题目描述

题解

某位中 11 出现次数的计算方法:

根据当前位 cur值的不同,分为以下三种情况:

  1. cur = 0 时:此位 1 的出现次数只由高位 high 决定,计算公式为:

  1. cur = 1 时: 此位 1的出现次数由高位 high 和低位 low 决定,计算公式为:

  1. 当 *cur = 2, 3, .., 9 *时:此位 11 的出现次数只由高位 high决定,计算公式为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public int countDigitOne(int n) {
int high = n / 10;
int cur = n % 10;
int res = 0;
int low = 0;
int digit = 1;
while (high != 0 || cur != 0) {
if (cur == 0) {
res += high * digit;
} else if (cur == 1) {
res += high * digit + low + 1;
} else if (cur > 1) {
res += high * digit + digit;
}
low += cur * digit;
cur = high % 10;
high /= 10;
digit *= 10;
}
return res;
}
-------------本文结束感谢您的阅读-------------
可以请我喝杯奶茶吗