Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Example Input
59*684/-3*+#
Example Output
57
Hint
基本操作数都是一位正整数!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct hh
{
int data[10010];
int top;
};
void main()
{
struct hh *l;
l=(struct hh *)malloc(sizeof(struct hh));
l->top=-1;
char a[10010];
int n,i,x,y;
scanf("%s",&a);
n=strlen(a);
for(i=0;i<n-1;i++)
{
if(a[i]=='+')
{
x=l->data[l->top];
l->top--;
y=l->data[l->top];
l->data[l->top]=y+x;
}
else if(a[i]=='-')
{
x=l->data[l->top];
l->top--;
y=l->data[l->top];
l->data[l->top]=y-x;
}
else if(a[i]=='*')
{
x=l->data[l->top];
l->top--;
y=l->data[l->top];
l->data[l->top]=y*x;
}
else if(a[i]=='/')
{
x=l->data[l->top];
l->top--;
y=l->data[l->top];
l->top--;
if(x!=0)
{
l->top++;
l->data[l->top]=y/x;
}
else
exit(0);
}
else
{
l->top++;
l->data[l->top]=a[i]-'0';
}
}
printf("%d\n",l->data[l->top]);
}