Bài 24. Tìm số đảo ngược trong C/C++

0
63
Rate this post

Tìm số đảo ngược của một số là một bài tập lập trình cơ bản. Bài tập này không chỉ giúp bạn luyện tập tư duy lập trình mà còn phát triển khả năng giải quyết các bài toán. Trong bài viết này, chúng ta sẽ cùng khám phá một số cách tiếp cận khác nhau để giải quyết bài toán tìm số đảo ngược.

Tìm số đảo ngược của một số

Bài toán tìm số đảo ngược của một số

Trong ngôn ngữ lập trình C/C++, chúng ta nhập vào một số nguyên dương n từ bàn phím và in ra số đảo ngược của số n vừa nhập.

Ví dụ:

  1. Nhập n = 12345 -> Khi đó số đảo ngược của n = 54321.
  2. Nhập n = 12340 -> Khi đó số đảo ngược của n = 4321.
  3. Nhập n = 1000 -> Khi đó số đảo ngược của n = 1.

Nhận xét bài toán

Trong quá trình giải quyết bài toán, chúng ta cần lưu ý một số điểm sau:

  1. Nếu n là một số nguyên dương nhỏ, ta có thể sử dụng kiểu int hoặc long long của C/C++ để tính toán.
  2. Chú ý trường hợp có số 0 ở cuối (tùy cách giải).
  3. Nếu n có nhiều chữ số (có thể lên tới vài nghìn chữ số), chúng ta cần sử dụng mảng ký tự trong C hoặc kiểu string của C++ để xử lý.

Ý tưởng tìm số đảo ngược

Đối với số nhỏ nằm trong phạm vi cho phép của kiểu dữ liệu số, chúng ta có thể tìm số đảo ngược của một số bằng cách sử dụng hai cách tiếp cận sau:

Cách 1: Giả sử n = 12345. Khi đó ta có thể viết n = 110^5 + 210^4 + 310^3 + 410^2 + 510^1. Vậy số đảo ngược của n = 54321 có thể viết thành 510^5 + 410^4 + 310^3 + 210^2 + 110^1. Nếu bạn để ý, chúng có sự trái ngược nhau. Bạn có thể vận dụng tính chất này để tìm số đảo ngược.

Cách 2: Lấy từng chữ số ở hàng đơn vị và in ra luôn. Chúng ta có thể sử dụng toán tử chia nguyên (/) và chia dư (%) trong C/C++ để thực hiện việc này. Chẳng hạn, với n = 12345, ta có thể thực hiện như sau:

n = 12345
digit = n % 10 = 5
n = n / 10 = 1234

digit = n % 10 = 4
n = n / 10 = 123

digit = n % 10 = 3
n = n / 10 = 12

digit = n % 10 = 2
n = n / 10 = 1

digit = n % 10 = 1
n = n / 10 = 0

Nếu bạn sử dụng cách này, hãy lưu ý trường hợp có số 0 ở cuối. Khi đảo ngược, không cho phép có số 0 ở đầu.

Trong trường hợp tổng quát, chúng ta có thể sử dụng cách 3 sau để giải quyết bài toán tìm số đảo ngược của một số. Cách này khá đơn giản.

Cách 3: Đối với số lớn có hàng nghìn đến hàng triệu ký tự, chúng ta cần sử dụng kiểu dữ liệu string để lưu số này. Tất nhiên, chúng ta vẫn có thể sử dụng cách này với số nhỏ. Khi đó, bài toán khá đơn giản, chỉ cần duyệt for ngược từ cuối chuỗi về đầu là xong. Nhưng hãy lưu ý số 0 ở cuối nhé!

Code bài tập: Tìm số đảo ngược của một số

Lưu ý: Cố gắng tự giải quyết bài toán trước khi xem đáp án.

Dưới đây là code được trình bày bằng ngôn ngữ lập trình C++.

Cách 1:

Code C:

#include <stdio.h>

int main() {
    int n, tmp;
    scanf("%d", &n);

    int res = 0;
    while (n > 0) {
        tmp = n % 10;
        res = res * 10 + tmp;
        n = n / 10;
    }

    printf("%d", res);
}

Code C++:

#include <iostream>
using namespace std;

int main() {
    int n, tmp;
    cin >> n;

    int res = 0;
    while (n > 0) {
        tmp = n % 10;
        res = res * 10 + tmp;
        n = n / 10;
    }

    cout << res;
}

Cách 2:

Code C:

#include <stdio.h>

int main() {
    int n, tmp;
    scanf("%d", &n);

    bool first = true;
    while (n > 0) {
        tmp = n % 10;
        if (first == true) {
            if (tmp != 0) {
                printf("%d", tmp);
                first = false;
            }
        } else {
            printf("%d", tmp);
        }

        n = n / 10;
    }
}

Code C++:

#include <iostream>
using namespace std;

int main() {
    int n, tmp;
    cin >> n;

    bool first = true;
    while (n > 0) {
        tmp = n % 10;
        if (first == true) {
            if (tmp != 0) {
                cout << tmp;
                first = false;
            }
        } else {
            cout << tmp;
        }

        n = n / 10;
    }
}

Cách 3:

Code C++:

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

int main() {
    string s;
    cin >> s;

    int l = s.length();
    if (s[0] == '0') {
        cout << "Số bạn nhập không hợp lệ!";
        return 0;
    }

    for (int i = 0; i < l; i++) {
        if (s[i] > '9' || s[i] < '0') {
            cout << "Số bạn nhập không hợp lệ!";
            return 0;
        }
    }

    while (s[l-1] == '0') {
        l--;
    }

    for (int i = l-1; i >= 0; i--) {
        cout << s[i];
    }
}

Giải thích code:

Cách này thực hiện khá là đơn giản và không cần tính toán phức tạp, có thể chạy với số cực kỳ lớn, với hàng triệu chữ số.

Lưu ý vì là string nên bạn cần kiểm tra kỹ càng số vừa nhập có hợp lệ không. Số hợp lệ là số không có số 0 ở đầu và chỉ gồm các ký tự số từ ‘0’ đến ‘9’.

Bạn có thể chạy thử với một số lớn để kiểm tra.

Kết luận

Như vậy, chúng ta đã kết thúc phần trình bày về bài toán tìm số đảo ngược của một số trên ngôn ngữ lập trình C++. Hi vọng bài viết này mang lại cho bạn những kiến thức bổ ích và thú vị.

Chúc bạn học tốt!


Được chỉnh sửa bởi Dnulib.