Kunkun学长觉得应该让学弟学妹了解一下这个知识点:后缀表达式相对于中缀表达式更容易让计算机理解和学习。现在kunkun学长给出一串后缀表达式,你能帮他算出这个后缀表达式的值吗?
输入格式:
第一行输入后缀表达式长度n(1<=n<=25000);
第二行输入一个字符串表示后缀表达式(每个数据或者符号之间用逗号隔开,保证输入的后缀表达式合法,每个数包括中间结果保证不超过long long长整型范围)
输出格式:
输出一个整数,即后缀表达式的值。
输入样例1:
6
10,2,+
输出样例1:
12
输入样例2:
14
2,10,2,+,6,/,-
输出样例2:
0
不用long long会wa
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;cin>>n;
stack<long long>num;
char ch[n];
cin>>ch;
for(int i=0;i<n;i++){
char c;c=ch[i];
if(c=='-'&&isdigit(ch[i+1])){//***
long long x=-(ch[i+1]-'0');
num.push(x);
i++;
}else if(isdigit(c)&&isdigit(ch[i-1])){
long long x=num.top();
x*=10;
if(x>=0) x+=(c-'0');
else x-=(c-'0');
num.pop();
num.push(x);
}else if(isdigit(c)){
num.push(c-'0');
}else if(c=='+'||c=='-'||c=='*'||c=='/'){
switch(c){
case '+':{
long long b=num.top();num.pop();
long long a=num.top();num.pop();
num.push(a+b);
break;
}
case '-':{
long long b=num.top();num.pop();
long long a=num.top();num.pop();
num.push(a-b);
break;
}
case '*':{
long long b=num.top();num.pop();
long long a=num.top();num.pop();
num.push(a*b);
break;
}
case '/':{
long long b=num.top();num.pop();
long long a=num.top();num.pop();
num.push(a/b);
break;
}
}
}
}
cout<<num.top();
}