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]);
}
本文介绍了一种使用栈数据结构来解析和计算后缀表达式的算法实现。通过C语言示例代码展示了如何处理基本的算术运算,包括加、减、乘、除,并确保了操作数为一位正整数。

被折叠的 条评论
为什么被折叠?



