假设表达式由数字和双目四则运算符+
,-
,*
,/
构成。试利用栈实现一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式(后缀表达式),同时将转换后的逆波兰式求值,最后输出逆波兰式及最终的求值结果。
输入格式
输入共有一行,为待求值的表达式,以换行结束。表达式保证是合法的,表达式中的整数在 [0,9][0,9] 以内,表达式长度不超过 2020。表达式中仅包含+
,-
,*
,/
以及数字(其中/
表示整除),不会出现其他字符。
输出格式
输出有两行,第一行为逆波兰式的结果,第二行为输入表达式的正确计算结果。逆波兰式中相邻的数字或运算符之间不用输出空格。
保证表达式计算的合理性,不需判断除零等情况。
表达式的计算应遵循同级运算从左往右,先乘除后加减的原则。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_LEN 30
#define MAX 100
//栈的数组实现
typedef struct
{
int data[MAX_LEN];