涉及算法:栈的基本操作
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
const int M=3e5+10,N=1e3+10;
using namespace std;
string s;
stack<char>st;
signed main()
{
cin>>s;
for(int i=0;i<s.size();i++)
{
//是左括号,压入栈中
if(s[i]=='(')
{
st.push('(');
}
//是右括号,判断栈中是否有元素 若为空,则该右括号注定没有左括号与之对应,匹配失败
if(s[i]==')')
{
if(st.empty())
{
cout<<"NO"<<endl;
return 0;
}
//若栈不为空 则栈中有左括号与之匹配 匹配成功
else
{
st.pop();
}
}
}
//若最终栈为空 说明所有括号匹配成功
if(st.empty())
{
cout<<"YES"<<endl;
}
//否则,有左括号未能匹配成功
else
{
cout<<"NO"<<endl;
}
return 0;
}
涉及算法:栈
思路:
1.依次输入:
·如果是数则继续输入
·如果是' . ' 则压栈
·如果是运算符,则出栈(栈顶为右参数,第二位为左参数)
·如果是'@',则停止操作,将栈顶值输出
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
signed main()
{
char c;
int left=0,right=0,temp=0;
stack<int> s;
cin>>c;
while(c!='@')
{
left=0;
//输入数字
if(c>='0'&&c<='9')
{
while(c>='0'&&c<='9')
{
temp=c-'0';
left=left*10+temp;
cin>>c;
}
}
//将已输入的数字压入栈中
//如果第一个if执行了,与之对应的else if就不会执行。
//它可能执行了上一个if输入的c=='.' 此时若用else if则不会执行下面这个c=='.'的情况 所以应该用if
if(c=='.')
{
s.push(left);
}
//取出栈中元素 进行运算
else
{
right=s.top();
s.pop();
left=s.top();
s.pop();
if(c=='+') s.push(left+right);
if(c=='-') s.push(left-right);
if(c=='*') s.push(left*right);
if(c=='/') s.push(left/right);
}
cin>>c;
}
//栈顶元素即为答案
cout<<s.top()<<endl;
return 0;
}