回文数字-栈

【问题描述】

  一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如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 @   Hi,小董先生  阅读(150)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示