P1449 后缀表达式
题目
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
本题中运算符仅包含 $\texttt{+-*/}$。保证对于 $\texttt{/}$ 运算除数不为 0。特别地,其中 $\texttt{/}$ 运算的结果需要向 0 取整(即与 C++ /
运算的规则一致)。
如:$\texttt{3(5-2)+7}$ 对应的后缀表达式为:$\texttt{3.5.2.-7.+@}$。在该式中,@
为表达式的结束符号。.
为操作数的结束符号。
输入
输入一行一个字符串 $s$,表示后缀表达式。
输出
输出一个整数,表示表达式的值。
样例 1
输入
3.5.2.-*7.+@
输出
16
样例 2
输入
10.28.30./*7.-@
输出
-7
思路
先定义几个变量和数组,当输入不等于 @
时,就进行加减乘除等操作,最后输出答案即可。
代码
#include<bits/stdc++.h>
using namespace std;
stack<int>num;
int Num,num2,flag=0,i,numa,numb;
char Ch,str[10005],ccty[25];
int Makenum()
{
int ret=0;
for(int i=0; i<=strlen(ccty)-1; i++)
{
if(ccty[i]=='*')
break;
ret=ret*10+ccty[i]-'0';
ccty[i]='*';
}
return ret;
}
int main()
{
cin>>str;
char cha;
cha=str[0];
int k=0;
while(cha!='@') // '@' 是结束输入,所以不是 '@' 时进行下列操作
{
if(flag==0)
i=0;
if(cha>='0'&&cha<='9')
{
flag=1;
ccty[i]=cha;
i++;
}
// '.' 代表每个数字之间的分隔,如果是 '.' 那么将前面的数字存在栈中
if(cha=='.')
{
flag=0;
Num=Makenum();
num.push(Num);
}
// 开始进行加减乘除等运算
if((cha<'0'||cha>'9')&&cha!='.')
{
numa=num.top();
num.pop();
numb=num.top();
num.pop();
if(cha=='+')
num.push(numb + numa);
if(cha=='-')
num.push(numb - numa);
if(cha=='*')
num.push(numb * numa);
if(cha=='/')
num.push(numb / numa);
}
k++;
cha = str[k];
}
cout<<num.top()<<endl;
return 0;
}
标签:cha,后缀,P1449,num,numa,numb,表达式
From: https://www.cnblogs.com/IronMan-PZX/p/18122784