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.
Để 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ả.