# 题目描述
求出 1-13 的整数中 1 出现的次数,并算出 100~1300 的整数中 1 出现的次数?为此他特别数了一下 1-13 中包含 1 的数字有 1、10、11、12、13 因此共出现 6 次,但是对于后面问题他就没辙了。ACMer 希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中 1 出现的次数(从 1 到 n 中 1 出现的次数)。 方法一:对于每个数来说求个位只需对 10 取余(%10),然后将原数除以 10 取整,再对 10 取余拿到十位...依次类推
# 测试用例
用例1:
- 输入:n = 12
- 输出:5
用例2:
- 输入:n = 13
- 输出:6
# 代码实现
时间复杂度很高,个别用例无法通过,比如上亿的数 —— 824883294
var __readline = require("readline-sync");
__readline.setDefaultOptions({ prompt: "" });
var readline = __readline.prompt;
console.log("请输入n: ");
const n = parseInt(readline());
// 对于每个数来说求个位只需对 10 取余(%10),
// 然后将原数除以 10 取整,再对 10 取余拿到十位...依次类推
// 枚举统计每一个数位含有1的个数,同时记录总数,最后返回总数即可
// 比如判断12,就计算1-12之间1,2,3,4 —— 12 每个数位中含有1的个数
function NumberOf1Between1AndN_Solution(n) {
// write code here
var count = 0;
for (let i = n; i > 0; i--) {
for (let j = i; j > 0; j = parseInt(j / 10)) {
//对j/10取整
if (j % 10 === 1) {
count++;
}
}
}
return count;
}
const res = NumberOf1Between1AndN_Solution(n);
console.log("结果为: ", res);
/*
请输入n:
111111
结果为: 66672
*/
const res = NumberOf1Between1AndN_Solution(n);
console.log("结果为: ", res);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40