【數據結構:堆棧】判斷回文數


問題 C: 【數據結構:堆棧】判斷回文數

時間限制: 1 Sec  內存限制: 64 MB
提交: 8  解決: 5
[提交][狀態][討論版]

題目描述

進入上古文明遺跡的第二個陷阱是產生的密鑰有可能是一個回文數,如果用戶不小心輸入這個回文數,就會引發危險,所以你需要判斷一個數是否是回文數。

要求:由於輸入的一個回文數可能無窮大,所以用單鏈表存儲該數,將用戶輸入的數以一個單鏈表的方式存儲,從頭掃描該單鏈表,將前面的一半元素入棧,若元素總個數為奇數,則跳過中間的那個元素,然后開始循環:邊退棧邊在單鏈表中后移指針,若當前棧頂元素與單鏈表中當前節點的值域不相等,則退出循環。最后如果棧空且鏈表比較完畢,則是回文數,否則不是回文數。

輸入

為一個字符串(長度小於100000),即需判斷的數。

輸出

如果是回文數,輸出1;否則輸出0。

樣例輸入

111122221111

樣例輸出

1
代碼:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>

using namespace std;

char a[100005];

int main()
{
    int len;
    stack<char> s1;
    int half;
    int b;
    while(scanf("%s",a)!=EOF){
        len=strlen(a);
        half=len/2;
        b=0;
        if(len%2==0){
            for(int i=0;i<half;i++){
                s1.push(a[i]);
            }
            for(int i=half;i<len;i++){
                char t=s1.top();
                s1.pop();
                if(t!=a[i]){
                    printf("0\n");
                    b=1;
                    break;
                }
            }
            if(b!=1){
                printf("1\n");
            }

        }
        if(len%2==1){
            for(int i=0;i<half;i++){
                s1.push(a[i]);
            }
            for(int i=half+1;i<len;i++){
                char t=s1.top();
                s1.pop();
                if(t!=a[i]){
                    printf("0\n");
                    b=1;
                    break;
                }
            }
            if(b!=1){
                printf("1\n");
            }
        }


    }
    return 0;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM