1.要求
输入一个数学算术表达式,计算它的值并输出,实现科学计算器。输入为0-9数字,+ -*,以及()括号。
暂时完成了数字0-9的运算,对于大于两位的十进制数,需要将原先的char变为string,并且对字符串进行划分,来确定每个数字大小。如对于“1+2”和“11+22”,基本的运算程序相同,只是需要根据运算符和可能的括号来确定参加计算的数值是多少。
2.设计思路
2.1 改写后缀表达式
对于一个数学算术表达式,如6*(5+(2+3)*8+3),需要根据算术计算符的优先级进行划分,先计算优先级高的,其结果再参与下个计算。上述表达式为中缀记法,而后缀记法为6523+8*+3+*。可以看出后缀记法不含有括号,且计算顺序为从左到右,不需要判断优先级。
基本思路是利用栈将中缀算术表达式改写为后缀算术表达式。然后利用栈求解后缀算术表达式的结果
对于带有括号的中缀表达式,可以利用栈实现中缀表达式到后缀表达式的改写。基本思路是遍历输入字符串,对于每个字符进行判断。
如果是数字,则放到输出表达式中。
如果是运算符‘ + ’ ‘ - ’ ‘ * ’ ‘ ( ’那么根据栈顶元素判断。如当前运算符优先级>栈顶元素,当前运算符入栈。否则栈顶元素出栈,放入输出表达式,直到当前运算符优先级小于栈顶元素或栈空。
如果是运算符‘)’那么将栈顶元素放到输出表达式时,直到栈顶元素为‘&#