有点类似LeetCode的计算器,但本题只有乘法和加法两种运算:面试题 16.26. 计算器 - 力扣(LeetCode)
可以将数字和操作符分别读入进来,解析成序列a 和 op
由于有优先级的区别,所以先第一遍扫描先计算#这个操作。
计算完#,剩下的都是$操作。所以可以直接从左往右扫描一遍,得到最终结果。
已知火星人使用的运算符为 # ,$,其与地球人的等价公式如下:
x # y = 4 * x + 3 * y + 2
x $ y = 2 * x + y + 3
其中 x 、y 是无符号整数
地球人公式按 C 语言规则计算
火星人公式中,# 号的优先级高于$ ,相同的运算符,按从左往右的顺序计算
现有一段火星人的字符串报文,请你来翻译并计算结果
火星人的字符串表达式(结尾不带回车换行)
输入的字符串说明:字符串为仅无符号整数和操作符(#、$)组成的计算表达式,例如:
123#4$5#67$78
用例保证字符串中,操作数与操作符之间没有任何分隔符
用例保证操作数取值范围为 32 为无符号整数
保证输入以及计算结果不会出现整数溢出
保证输入的字符串为合法的求值报文,例如:123#4$5#67$78
保证不会出现非法的求值报文,例如类似这样字符串:
#4$5 //缺少操作数
4$5# //缺少操作数
4#$5 //缺少操作数
4 $5 //有空格
3+4-5*6/7 //有其他操作符
1234567897654321$54321 //32位整数计算溢出
根据输入的火星人字符串输出计算结果(结尾不带回车换行)
输入
7#6$5#12
输出
157
说明:
示例:
7#6$5#12
=(4*7+3*6+2)$5#12
=48$5#12
=48$(4*5+3*12+2)
=48$58
=2*48+58+3
=157