Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เขียนโปรแกรมกลับตัวเลข (Reverse Digits) ใน C++

โจทย์

ได้รับจำนวนเต็ม ต้องการกลับลำดับหลัก (digits) ของตัวเลข

ตัวอย่าง

Input: n = 786521
Output: 125687

อัลกอริทึม

ดึงหลักหน่วย (n % 10) บวกเข้า result แล้วหาร n ด้วย 10 ทำซ้ำจน n = 0

result = 0
while n > 0:
    digit = n % 10
    result = result * 10 + digit
    n = n / 10

วิธีที่ 1: Iterative Approach (แนะนำ)

#include <iostream>
using namespace std;

int reverseDigitsIterative(int n) {
    int reversed = 0;
    while (n > 0) {
        reversed = reversed * 10 + n % 10;
        n /= 10;
    }
    return reversed;
}

int main() {
    int n = 4562;
    cout << "The number is: " << n << endl;
    cout << "Reverse of number is: " << reverseDigitsIterative(n);
    return 0;
}

ผลลัพธ์

The number is: 4562
Reverse of number is: 2654

วิธีที่ 2: Recursive Approach

#include <iostream>
using namespace std;

int reverseNumber = 0;
int placeValue = 1;

void reverseDigitsRecursive(int n) {
    if (n <= 0) return;
    reverseDigitsRecursive(n / 10);
    reverseNumber += (n % 10) * placeValue;
    placeValue *= 10;
}

int main() {
    int n = 4562;
    cout << "The number is: " << n << endl;
    reverseDigitsRecursive(n);
    cout << "Reverse of number is: " << reverseNumber;
    return 0;
}

ผลลัพธ์

The number is: 4562
Reverse of number is: 2654

การจัดการกรณีพิเศษ (Edge Cases)

int reverseDigitsSafe(int n) {
    // Handle negative numbers
    bool negative = n < 0;
    if (negative) n = -n;
    
    // Handle overflow (INT_MAX = 2147483647)
    long long reversed = 0;  // ใช้ long long กัน overflow ระหว่างคำนวณ
    while (n > 0) {
        reversed = reversed * 10 + n % 10;
        if (reversed > INT_MAX) return 0;  // หรือ throw exception
        n /= 10;
    }
    
    return negative ? -reversed : reversed;
}

Complexity

  • Time: O(log10 n) - จำนวนรอบเท่ากับจำนวนหลัก
  • Space (Iterative): O(1)
  • Space (Recursive): O(log10 n) - recursion stack

สรุป

Iterative approach แนะนำมากกว่า: เร็วกว่า, ใช้หน่วยความจำน้อยกว่า, ไม่มี stack overflow risk ต้องระวัง integer overflow และ negative numbers ใน production code