Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số có chữ số 0 trong C++


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