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

Đảo ngược số nguyên bằng hàm lặp (iterative) trong C

Mô tả bài toán

Viết hàm đảo ngược thứ tự chữ số của một số nguyên dương sử dụng vòng lặp while (phép lặp - iterative).

Thuật toán

Đầu vào: số nguyên n
Khởi tạo: reverse = 0

Khi n > 0:
    reverse = reverse * 10 + n % 10  // Thêm chữ số cuối vào reverse
    n = n / 10                       // Bỏ chữ số cuối của n

Trả về reverse

Ví dụ minh họa (n = 356789)

Bước n n % 10 reverse (trước) reverse = reverse*10 + n%10
1356789909
2356788998
33567798987
435669879876
5355987698765
63398765987653
70--Dừng

Chương trình C

#include <stdio.h>

// Hàm đảo ngược số nguyên
int daoNguoc(int so) {
    int dao = 0;
    
    while (so > 0) {
        dao = dao * 10 + so % 10;
        so = so / 10;
    }
    
    return dao;
}

int main() {
    int so;
    
    printf("Nhap mot so nguyen: ");
    scanf("%d", &so);
    
    printf("So dao nguoc: %d\n", daoNguoc(so));
    
    return 0;
}

Kết quả

Nhap mot so nguyen: 356789
So dao nguoc: 987653

Xử lý các trường hợp đặc biệt

// Xử lý số âm
int daoNguoc(int so) {
    int dau = 1;
    if (so < 0) {
        dau = -1;
        so = -so;  // Làm dương
    }
    
    int dao = 0;
    while (so > 0) {
        dao = dao * 10 + so % 10;
        so /= 10;
    }
    
    return dao * dau;
}

// Xử lý số kết thúc bằng 0 (ví dụ: 1200 -> 21, không phải 0021)
int daoNguoc(int so) {
    int dao = 0;
    while (so > 0) {
        dao = dao * 10 + so % 10;
        so /= 10;
    }
    return dao;  // Tự động bỏ các số 0 đầu
}

So sánh: Iterative vs Recursive

Đặc điểm Iterative (Vòng lặp) Recursive (Đệ quy)
Bộ nhớ stackO(1) - Hằng sốO(log n) - Theo số chữ số
Hiệu năngNhanh hơnChậm hơn (overhead gọi hàm)
Dễ hiểuTrực quanTư duy toán học
Rủi roKhông tràn stackCó thể tràn stack nếu số lớn

Khuyến nghị: Dùng vòng lặp (iterative) cho bài toán đảo ngược số vì đơn giản, hiệu quả và an toàn hơn.