计算这个问题最容易的方法是使用一个栈。当见到一个数时就把它推入栈中,在遇到一个运算符时该运算符就作用于从该栈弹出的两个数(符号)上,将所得结果推入栈中,例如
后缀表达式
6523 + 8 * + 3 + *
代码如下:
#include <stdio.h>
#include <malloc.h>
#define StackSize 30
typedef struct stack
{
int a[StackSize];
int top;
}Stack;
int NiBoLan(char *s)
{
int num1, num2;
Stack S;
S.top = -1;
int sum;
int i = 0;
while (s[i] != '#')
{
if (s[i] >= '0' && s[i] <= '9')
{
s[i] -= 48; //字符的先转换为数字
S.a[++S.top] = s[i];
}
else
{
num1 = S.a[S.top--];
num2 = S.a[S.top--];
if (s[i] == '+')
{
sum = num1 + num2;
}
else if (s[i] == '-')
{
sum = num2 - num1;
}
else if (s[i] == '*')
{
sum = num1 * num2;
}
else if (s[i] == '/')
{
sum = num2 / num1;
}
S.a[++S.top] = sum;
}
++i;
}
printf("结果sum = %d\n", S.a[S.top]);
return S.a[S.top];
}
int main()
{
char s[] = {'6', '5', '2', '3', '+', '8', '*', '+', '3', '+', '*','#'};
NiBoLan(s);
return 0;
}
运行结果为: