题目要求:
读取一段字符,用.划分数字,@代表表达式结束。
后缀表达式主要处理思路
1.遇到操作数入栈
2.遇到操作符把栈顶两个操作数出栈,然后做运算(上面的数字放在右边,下面的数字放在左边)之后,把结果入栈
3.如何判断到底是负数还是减号呢?
不知道,所以就先不管了。让栈的top从0开始,如果一开始就遇到了-那么直接处理就行了。
我的考虑是多余的,后缀表达式根本不用考虑那么多,语法限制直接导致这些都可以很合理的解决,所以上面一二步骤是公理。
没啥好讲的。
代码:
#include<stdio.h>
//数据结构,栈,top
char cal[1002];
int top=0,a,b,d,stack[1000]={0};
int main()
{
//读取
scanf("%s",cal);
for(int i=0;cal[i]!='@';i++)
{
if(cal[i]=='*'||cal[i]=='-'||cal[i]=='+'||cal[i]=='/')
{
//出两个,计算
//先出放右边,后出放左边
b=stack[top];
top--;
a=stack[top];
top--;
if(cal[i]=='*')
{
d=a*b;
}
else if(cal[i]=='/')
{
d=a/b;
}
else if(cal[i]=='+')
{
d=a+b;
}
else if(cal[i]=='-')
{
d=a-b;
}
top++;
stack[top]=d;
}//欧克
else//
{
d=0;
while(cal[i]!='.')
{
//数字出来
d=d*10+(cal[i]-'0');
i++;
}
top++;
stack[top]=d;
}
}
printf("%d",stack[top]);
return 0;
}