Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Sample Input
59*684/-3*+#
Sample Output
57
Hint
基本操作数都是一位正整数!
输入的是数字就压入栈里, 是运算符,就从栈顶取出两个数来运算,把运算的和压进去
#include <stdio.h>
#include <string.h>
int main()
{
int i,sum=0; int top=0;
int stack[1000];
char a;
while(~scanf("%c",&a),a!='#')
{
if(a>='0'&&a<='9')
stack[top++]=a-'0';
else
{
if(a=='*')
{
sum=stack[top-1]*stack[top-2];
stack[top-2]=sum;
top-=1;
}
else if(a=='/')
{
sum=stack[top-2]/stack[top-1];
stack[top-2]=sum;
top-=1;
}
else if(a=='-')
{
sum=stack[top-2]-stack[top-1];
stack[top-2]=sum;
top-=1;
}
else if(a=='+')
{
sum=stack[top-1]+stack[top-2];
stack[top-2]=sum;
top-=1;
}
}
}
printf("%d\n",sum);
return 0;
}
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
int main()
{
char c;
stack<int>s;
int sum = 0;
while(~scanf("%c",&c) && c!='#')
{
if(c>='0' && c<='9')
s.push(c-'0');
else
{
if(c == '*')
{
sum = s.top();
s.pop();
sum *= s.top();
s.pop();
s.push(sum);
}
else if(c == '/')
{
int v = s.top();
s.pop();
int t = s.top();
sum = t/v;
s.pop();
s.push(sum);
}
else if(c == '+')
{
sum = s.top();
s.pop();
sum += s.top();
s.pop();
s.push(sum);
}
else if(c == '-')
{
int v = s.top();
s.pop();
int t = s.top();
sum = t-v;
s.pop();
s.push(sum);
}
}
}
printf("%d\n",sum);
return 0;
}