Cho một số N. Mục tiêu là tìm các số có chữ số 0 và nằm trong khoảng [1, N].
Ta thực hiện bằng cách duyệt số từ 10 đến N (không cần kiểm tra 1 đến 9) và với mỗi số kiểm tra từng chữ số bằng vòng lặp while. Nếu tìm thấy chữ số 0 thì tăng count và chuyển sang số tiếp theo, ngược lại chia số cho 10 để kiểm tra chữ số tiếp theo cho đến khi số > 0.
Hãy hiểu qua các ví dụ.
Đầu vào
N=11
Đầu ra
Số từ 1 đến N có chữ số 0: 1
Giải thích
Duyệt từ i=10 đến i<=11. Chỉ 10 có chữ số 0. Không cần kiểm tra khoảng [1,9].
Đầu vào
N=100
Đầu ra
Số từ 1 đến N có chữ số 0: 10
Giải thích
10, 20, 30, 40, 50, 60, 70, 80, 90, 100. Mười số có chữ số 0.
Phương pháp sử dụng trong chương trình dưới đây
- Nhận số nguyên N.
- Hàm
haveZero(int n)nhận n làm tham số và trả về số lượng số có chữ số 0. - Khởi tạo biến count = 0 cho các số như vậy.
- Duyệt khoảng số bằng vòng lặp for. i=10 đến i=n.
- Với mỗi số num=i, dùng vòng lặp while kiểm tra nếu num%10==0, nếu sai chia num cho 10 và chuyển sang chữ số tiếp theo cho đến num>0.
- Nếu đúng dừng kiểm tra tiếp, tăng count và thoát vòng while.
- Sau tất cả vòng lặp count chứa tổng số có chữ số 0 từ 1 đến N.
- Trả về count làm kết quả.
Ví dụ
#include <bits/stdc++.h>
using namespace std;
int haveZero(int n) {
int count = 0;
for (int i = 1; i <= n; i++) {
int num = i;
while(num > 1) {
int digit = num % 10;
if (digit == 0) {
count++;
break;
} else {
num = num / 10;
}
}
}
return count;
}
int main() {
int N = 200;
cout << "Số từ 1 đến N có chữ số 0: " << haveZero(N);
return 0;
}
Đầu ra
Nếu chạy mã trên sẽ cho kết quả sau:
Số từ 1 đến N có chữ số 0: 29