Mô tả bài toán
Đảo ngược số có 2 hoặc 3 chữ số sử dụng phép chia (/) và modulo (%) mà không dùng vòng lặp.
Logic cơ bản
n % 10→ Lấy chữ số hàng đơn vị (phần dư)n / 10→ Lấy phần còn lại (phần nguyên)
Chương trình 1: Đảo ngược số 2 chữ số
#include <stdio.h>
int main() {
int so;
printf("Nhap so 2 chu so: ");
scanf("%d", &so);
int hangDonVi = so % 10; // Chữ số cuối
int hangChuc = so / 10; // Chữ số đầu
// Ghép lại theo thứ tự ngược
printf("So dao nguoc: %d%d\n", hangDonVi, hangChuc);
return 0;
}
Kết quả
Nhap so 2 chu so: 45
So dao nguoc: 54
Chương trình 2: Đảo ngược số 3 chữ số
#include <stdio.h>
int main() {
int so;
printf("Nhap so 3 chu so: ");
scanf("%d", &so);
// Tách các chữ số
int tram = so / 100; // Hàng trăm
int chuc = (so % 100) / 10; // Hàng chục
int donVi = so % 10; // Hàng đơn vị
// Ghép lại ngược: đơn vị -> chục -> trăm
int daoNguoc = donVi * 100 + chuc * 10 + tram;
printf("So dao nguoc: %d\n", daoNguoc);
return 0;
}
Kết quả
Nhap so 3 chu so: 479
So dao nguoc: 974
Phân tích chi tiết (479)
| Biểu thức | Giá trị | Giải thích |
|---|---|---|
| 479 / 100 | 4 | Hàng trăm (phép chia nguyên) |
| 479 % 100 | 79 | 2 chữ số cuối |
| 79 / 10 | 7 | Hàng chục |
| 479 % 10 | 9 | Hàng đơn vị |
| 9*100 + 7*10 + 4 | 974 | Ghép ngược |
So sánh 2 phương pháp
| Phương pháp | Ưu điểm | Nhược điểm |
|---|---|---|
| Chia/Modulo (không vòng lặp) | Nhanh, đơn giản cho số chữ số cố định | Chỉ dùng cho số chữ số biết trước (2, 3) |
| Vòng lặp while | Áp dụng cho mọi độ dài số | Chậm hơn chút xíu do overhead vòng lặp |
Mở rộng: Đảo ngược n chữ số (kết hợp)
// Nếu biết trước tối đa 6 chữ số
int daoNguocCoDinh(int so) {
int a[6], n = 0;
while (so > 0) {
a[n++] = so % 10;
so /= 10;
}
int kq = 0;
for (int i = 0; i < n; i++)
kq = kq * 10 + a[i];
return kq;
}
Phép chia và modulo là nền tảng của mọi thuật toán xử lý chữ số. Hiểu rõ chúng giúp giải quyết linh hoạt các bài toán liên quan.