Viết hàm nhận số nguyên dương num, đếm tổng số chữ số 1 xuất hiện trong tất cả số từ 1 đến num.
Ví dụ: 31 → 14 (xuất hiện ở 1,10,11,12,13,14,15,16,17,18,19,21,31).
Ví dụ
const num = 31;
const countOnes = (num = 1) => {
if (num <= 0) return 0;
let sum = 0;
num += '';
let helper = p => {
let leftNum = 0, rightNum = 0;
let di = num[p];
if (p > 0) leftNum = parseInt(num.slice(0, p));
if (p + 1 < num.length) rightNum = parseInt(num.slice(p + 1));
if (di > 1) sum += (leftNum + 1) * (10 ** (num.length - 1 - p));
else if (di == 0) sum += leftNum * (10 ** (num.length - 1 - p));
else sum += leftNum * (10 ** (num.length - 1 - p)) + rightNum + 1;
};
for (let i = 0; i < num.length; i++) helper(i);
return sum;
};
console.log(countOnes(num));
Kết quả
14