Đảo ngược một số nguyên dương trong C++

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

Giả sử, ta có một số nguyên dương 1901. Số đảo ngược của số nguyên dương này sẽ là 1091. Trong bài này, chúng ta sẽ sử dụng C++ để tìm số đảo ngược của một số nguyên dương.

1. Sử dụng phép toán số học và vòng lặp while

Đoạn code bên dưới sử dụng các phép toán số học và vòng lặp while để đảo ngược một số nguyên trong C++.

Lưu ý: Muốn kiểm tra người dùng nhập số nguyên dương hợp lệ hay không thì các bạn xem lại bài đếm số chữ số của một số nguyên dương trong C++.

#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "Nhap vao mot so nguyen: ";
    cin >> num;
    int reversedNum = 0;

    while (num != 0) {
        int digit = num % 10; // Lay chu so cuoi cung
        reversedNum = reversedNum * 10 + digit;
        num /= 10; // Loai bo chu so cuoi cung
    }

    cout << "So dao nguoc: " << reversedNum <<endl;

    return 0;
}

Kết quả

Nhap vao mot so nguyen: 1901
So dao nguoc: 1091

Chương trình trên yêu cầu người dùng nhập một số nguyên và lưu nó vào biến num. Sau đó, vòng lặp while được lặp lại cho đến khi num != 0 là sai. Trong mỗi lần lặp, chúng ta lấy chữ số cuối cùng của num bằng cách lấy phần dư của phép chia num cho 10, tính giá trị số đảo ngược reversedNum. Sau đó, gán num=num/10 (tức là num giảm đi 10 lần).

Hãy xem các bước chạy chi tiết chương trình bên dưới:

numnum!=0phần dưreversedNum
1901true10 * 10 + 1 = 1
190true01 * 10 + 0 = 10
19true910 * 10 + 9 = 109
1true1109 * 10+1 = 1091
0falsedừng vòng lặp

2. Sử dụng mảng (array)

Một cách khác là chúng ta có thể sử dụng mảng (array) để lưu các chữ số trong số nguyên cần đảo ngược. Với cách này, chúng ta sẽ in ra từng chữ số đảo ngược của số nguyên chứ không tính ra giá trị của số đảo ngược.

#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "Nhap vao mot so nguyen: ";
    cin >> num;
    int arr[10], i = 0;

    while (num != 0) {
        arr[i] = num % 10;// Lay chu so cuoi cung
        num /= 10; // Loai bo chu so cuoi cung
        i++;//tang bien index cho mang arr
    }
    cout << "So dao nguoc: ";
    for (int j = 0; j<i; j++) {
		cout << arr[j];
    }

    return 0;
}

Trong chương trình trên, mảng arr giúp lưu các chữ số cuối cùng đến đầu tiên của số nguyên num. Chúng ta chỉ cần duyệt mảng arr và in các chữ số ra để hiển thị được số đảo ngược.

Lưu ý: Khi khai báo mảng arr[10] thì mảng này chỉ lưu tối đa được 10 chữ số mà thôi. Các bạn có thể khai báo mảng với nhiều hoặc ít phần tử hơn tùy yêu cầu.

3. Sử dụng chuỗi (string)

Chúng ta hoàn toàn có thể chuyển số nguyên thành chuỗi. Sau đó, sử dụng các hàm trên chuỗi để đảo ngược chuỗi.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    int num;
    cout << "Nhap vao mot so nguyen: ";
    cin >> num;

    // Chuyen so thanh chuoi
    string numString = to_string(num);

    // Dao nguoc chuoi
    reverse(numString.begin(), numString.end());

    // Chuyen chuoi thanh so
    int reversedNum = stoi(numString);
    cout << "So dao nguoc: " << reversedNum;

    return 0;
}

Lưu ý: Nếu gặp các lỗi như bên dưới thì các bạn nên kiểm tra xem trình biên dịch C++ của mình có hỗ trợ C++ 11 hay không nhé.

In function 'int main()':
[Error] 'to_string' was not declared in this scope
[Error] 'stoi' was not declared in this scope

Các bạn có thể sử dụng các trình biên dịch C++ online để chạy chương trình.

Các ví dụ trong bài này áp dụng cho số nguyên dương. Nếu bạn muốn xử lý số âm hoặc số thực, bạn cần thực hiện các xử lý bổ sung.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Tổng các chữ số của một số nguyên dương trong C++Kiểm tra số đối xứ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ỏ.