
Pages Numbering
Cho biết số trang sách của 1 quyển sách
Hãy tìm số lượng các chữ số dùng để đánh số trang của quyển sách đó
Ví dụ:
- Với
n = 11
, thì kết quảpagesNumbering(n) = 13.
chữ số được sử dụng là:
131, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1
Đầu vào/đầu ra:
- [Thời gian chạy] 0.5 giây
- [Đầu vào] integer n
Điều kiện:1 ≤ n ≤ 10^8
. - [output] integer
Gợi ý:
- Do
n
có thể rất lớn, nên ko thể dùng vòng lặp để tính số các chữ số - Hãy tính số các chữ số theo công thức toán học (ví dụ như có bao nhiêu số có
1
chữ số,2
chữ số,3
chữ số, …)
Lý thuyết :
- Số có
i
chữ số sẽ bắt đầu từ10i - 1
đến10i - 1
- Vậy với các số có
1, 2, 3 ... n
chữ số, thì tổng số chữ số sẽ là bao nhiêu ? Nó sẽ là∑(10i - 10i - 1)
(i = 1 .. n
) (Cứ lấy số lượng số từng loại nhân với số chữ số tương ứng) - Vậy làm sao đếm được số chữ số từ
1
đếnn
?- Ta cần xác định xem
n
có bao nhiêu chữ số. Giả sửn
cóx
chữ số - Vậy thì các số từ
1
đếnx - 1
chữ số sẽ xuất hiện đủ. Riêng các số cóx
chữ số sẽ chỉ xuất hiện từ10
x - 1
đếnn
- Cộng tổng số lượng số nhân số chữ số tương ứng, ta sẽ có kết quả cần tìm
- Ta cần xác định xem
Hướng dẫn bài tập.
Code mẫu:
Ngôn ngữ Java:
int pagesNumbering(int n)
{
int k = 1;
int v1 = 0;
int v2 =0;
int m = String.valueOf(n).length();
if(n<10 && n>0){
v1 = n;
v2 =0;
}else{
for (int i = 1; i <= m - 1; i++){
v1 = (n - (int) Math.pow(10, i) + 1) * m;
v2 = v2 + (9 * i) * k;
k = k * 10;
}
}
return (v1 + v2);
}
Post Comment