Đếm số chữ số của một số nguyên dương trong C++

Đây là bài 3/15 bài của series môn học TH Nhập môn lập trình

Một bài tập C++ thường gặp là cho một số nguyên dương n, yêu cầu đếm số chữ số của n.

Số chữ số của một số nguyên dương trong C++
Số chữ số của một số nguyên dương trong C++

Để giải được bài tập này, chúng ta có thể sử dụng vòng lặp hoặc đệ quy. Trước hết, chúng ta cần kiểm tra số n nhập vào có phải số nguyên dương hay không. Bên dưới là đoạn code sử dụng do…while để kiểm tra số nhập vào n.

#include <iostream>
#include <limits>
using namespace std;

int main() {
    int num;
    bool check = false;
    do {
        cout << "Nhap mot so nguyen duong: ";
        cin >> num;
        check = cin.fail();
        if (check || num<=0) {
            cout << "So nhap vao khong hop le. Vui long nhap lai." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
    } while (check || num<=0);
    
    cout << "So " << num << " la so nguyen duong." << endl;
    
    return 0;
}

1. Sử dụng vòng lặp

Để đếm số chữ số trong C++, chúng ta cần sử dụng vòng lặp while và toán tử chia / để lấy từng chữ số của số đó. Sau đó, ta tăng biến đếm lên 1 cho mỗi chữ số được tìm thấy.

Dưới đây là một ví dụ về cách đếm số chữ số trong C++:

#include <iostream>
#include <limits>
using namespace std;

int main() {
    int num, count = 0;
    bool check = false;
    do {
        cout << "Nhap mot so nguyen duong: ";
        cin >> num;
        check = cin.fail();
        if (check || num<=0) {
            cout << "So nhap vao khong hop le. Vui long nhap lai." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
    } while (check || num<=0);
    //Dem so chu so cua so nguyen num
    while(num != 0) {
        num = num/10;
        count++;
    }

    cout << "So chu so cua num la " << count;
    
    return 0;
}

Trong ví dụ này, chúng ta khai báo biến num để lưu trữ số nhập vào từ bàn phím và biến count để đếm số chữ số. Sau đó, chúng ta sử dụng vòng lặp while để chia số đó cho 10 và tăng biến count lên 1 cho mỗi chữ số được tìm thấy. Vòng lặp sẽ tiếp tục cho đến khi num bằng 0. Cuối cùng, chúng ta in ra số chữ số bằng câu lệnh cout.

2. Sử dụng hàm đệ quy

#include <iostream>
#include <limits>
using namespace std;

int countDigits(int num) {
    if (num < 10) {
        return 1;
    }
    return 1 + countDigits(num / 10);
}

int main() {
    int num;
    bool check = false;
    do {
        cout << "Nhap mot so nguyen duong: ";
        cin >> num;
        check = cin.fail();
        if (check || num<=0) {
            cout << "So nhap vao khong hop le. Vui long nhap lai." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
    } while (check || num<=0);
    int count = countDigits(num);

    cout << "So chu so cua "<<num<<" la " << count;
    
    return 0;
}

Trong ví dụ trên, chúng ta sử dụng hàm countDigits để đếm số chữ số. Hàm này lấy một số nguyên là tham số và sử dụng đệ quy để chia số đó cho 10. Nếu tham số của hàm countDigits nhỏ hơn 10 thì return 1. Đây là điều kiện dừng của hàm đệ quy.

Trong hàm main, chúng ta nhập một số nguyên dương từ người dùng và gọi hàm countDigits để tính số chữ số. Sau đó, chúng ta in ra kết quả.

4.5/5 - (2 bình chọn)
Bài trước và bài sau trong môn học<< Kiểm tra dữ liệu đầu vào (user input) trong C++Tổng các chữ số của một số nguyên dương trong C++ >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.