10.15

qixunlu發表於2024-10-15

今天完成了對於迴文數的計算
只是使用棧:

點選檢視程式碼
#include<iostream>
#include<stack>
using namespace std;
bool isPalindrome(int num) {
    // 將負數排除,因為負數不可能是迴文數
    if (num < 0) return false;

    stack<int> stack;
    int original = num;
    int reversed = 0;

    // 逐位將數字的前半部分壓入棧中
    while (num > 0) {
        stack.push(num % 10);
        num /= 10;
    }

    // 逐位比較棧頂的數字與原數
    num = original; // 重置num為原始數字
    while (!stack.empty()) {
        int top = stack.top();
        if (num % 10 != top) return false; // 如果不相等,則不是迴文數
        stack.pop();
        num /= 10;
    }

    return true; // 全部數字相等,則為迴文數
}

int main() {
    int number;
    cout << "請輸入一個數字: ";
    cin >> number;

    if (isPalindrome(number)) {
        cout << number << " 是迴文數\n";
    } else {
        cout << number << " 不是迴文數\n";
    }

    return 0;
}
使用棧和佇列:
點選檢視程式碼
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
bool isPalindrome(int num) {
    // 負數不可能是迴文數
    if (num < 0) return false;

    stack<int> stack;
    queue<int> queue;

    // 提取每一位並分別存入棧和佇列
    int original = num;
    while (num > 0) {
        int digit = num % 10;
        stack.push(digit);
        queue.push(digit);
        num /= 10;
    }

    // 比較棧和佇列的每一位
    while (!stack.empty() && !queue.empty()) {
        if (stack.top() != queue.front()) {
            return false;  // 如果棧頂和隊首元素不相等,則不是迴文數
        }
        stack.pop();
        queue.pop();
    }

    return true;  // 所有位都相等,則為迴文數
}

int main() {
    int number;
    cout << "請輸入一個數字: ";
    cin >> number;

    if (isPalindrome(number)) {
        cout << number << " 是迴文數\n";
    } else {
        cout << number << " 不是迴文數\n";
    }

    return 0;
}