逆波兰表达式求值(C)

发布于 2020-06-10  1600 次阅读


#include<stdio.h>
typedef struct STRACK
{
double a[100];
int top;
} STRACK;
int main()
{
double totle=0,e=0;
char s[100];
int i;
STRACK L;
L.top=-1;
/*
样例输入
399 323 201 522 / *20 - + @
以@结束
*/
gets(s);
for(i=0; s[i]!='@'; i++){
if(s[i]<='9'&&s[i]>='0'){
L.top++;
int temp=s[i]-'0';
int k=i+1;
while(s[k]!='@'){
    //利用while循环得到由多位由字符组成的数值
if(s[k]<='9'&&s[k]>='0'){
temp=10*temp+(s[k]-'0');
i++;
k++;}
else break;
}
L.a[L.top]=temp;
}
else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
    //遇到运算符进行计算
{
switch(s[i])
{
case '+':
e=L.a[L.top-1]+L.a[L.top];
break;
case '-':
e=L.a[L.top-1]-L.a[L.top];
break;
case '*':
e=L.a[L.top-1]*L.a[L.top];
break;
case '/':
e=L.a[L.top-1]/L.a[L.top];
break;
}
L.a[L.top-1]=e;//往前一位存储
L.a[L.top]=0;
L.top--;
}}
printf("%.0lf",L.a[L.top]);//输出最后结果
return 0;
}

华科菜鸡计科学生