回文数字-栈

【问题描述】

  一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121, 1221,15651都是回文数。输入一个高精度数n,判断n是否为回文数字。 输入:一个高精度数n(n小于200) 输出:如果是回文数,就输出YES,否则就输出NO。

【样例输入】

  12345678987654321

【样例输出】

   YES

 

#include<iostream>
#include<stack> 
using namespace std;
stack <char> s;

int main(){
    string s2;
    int i, start; 
    cin>>s2;
    // 12345654321
    for(i=0; i<s2.length()/2; i++){
        s.push(s2[i]); // 如果s2的长度为奇数,则前一半元素入栈: 
    }
    // 如果s2的长度为偶数,则start=i;
    // 如果s2的长度为奇数,则start=i+1;
    if(s2.length()%2==0) start=i;
    else start=i+1;
    for(int j=start; j<s2.length(); j++){
        if(s.top()==s2[j]){
            s.pop(); 
        }else{
            cout<<"NO";
            return 0;
        }
    } 
    if(!s.empty()) cout<<"NO";
    else cout<<"YES";
    return 0;
}

 

posted @ 2022-07-19 16:34  Hi,小董先生  阅读(157)  评论(0)    收藏  举报