Cho hai số START và END xác định một khoảng số. Mục tiêu là tìm tất cả các số trong khoảng [START, END] chia hết cho tất cả chữ số khác 0 của nó. Ta thực hiện bằng cách duyệt số từ START đến END và với mỗi số kiểm tra xem số đó có chia hết cho tất cả chữ số khác 0 bằng vòng lặp while. Nếu có tăng count.
Hãy hiểu qua các ví dụ.
Đầu vào
START=10 END=20
Đầu ra
Số chia hết cho tất cả chữ số khác 0: 14
Giải thích
Các số 10, 11, 12, 15, 20 chia hết cho tất cả chữ số khác 0 của chúng.
Đầu vào
START=100 END=200
Đầu ra
Số chia hết cho tất cả chữ số khác 0: 25
Giải thích
Danh sách số chia hết cho tất cả chữ số khác 0: 100 101 102 104 105 110 111 112 115 120 122 124 126 128 132 135 140 144 150 155 162 168 175 184 200
Phương pháp sử dụng trong chương trình dưới đây
- Nhận số nguyên START và END làm biến phạm vi.
- Hàm
divisiblebyDigits(int start, int end)nhận biến phạm vi và trả về số lượng số chia hết cho tất cả chữ số khác 0 của chúng. - Khởi tạo biến count = 0 cho các số như vậy.
- Biến flag = 0.
- Duyệt khoảng số bằng vòng lặp for. i=start đến i=end.
- Với mỗi số num=i, dùng vòng lặp while kiểm tra số > 0.
- Tính digit = num%10. Nếu digit > 0 và i%digit==0 gán flag=1. Ngược lại flag=0 và thoát. Giảm num = num/10 để kiểm tra chữ số tiếp theo.
- Nếu tất cả chữ số khác 0 đều chia hết i, flag là 1. Tăng count.
- Sau tất cả vòng lặp count chứa tổng số chia hết cho chữ số khác 0.
- Trả về count làm kết quả.
Ví dụ
#include <bits/stdc++.h>
using namespace std;
int divisiblebyDigits(int start, int end) {
int count = 0;
int flag = 0;
for (int i = start; i <= end; i++) {
int num = i;
while(num > 0) {
int digit = num % 10;
if(digit > 0) {
if(i % digit == 0) {
flag = 1; // đặt cờ
} else {
flag = 0; // bỏ cờ
break;
}
}
num = num / 10;
}
if(flag == 1) { // chia hết cho tất cả chữ số khác 0
count++;
// cout << i << " ";
}
}
return count;
}
int main() {
int START = 10, END = 50;
cout << "Số chia hết cho tất cả chữ số khác 0: " << divisiblebyDigits(START, END);
return 0;
}
Đầu ra
Nếu chạy mã trên sẽ cho kết quả sau:
Số chia hết cho tất cả chữ số khác 0: 14