回文数字-栈
【问题描述】
一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如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; }