题目17-python华为原题题库- 火星文计算

火星文计算

题目

已知火星人使用的运算符号为 # 、 $

他们与地球人的等价公式如下:

  • x#y=4*x+3*y+2
  • x$y=2*x+y+3

其中 x y 是无符号整数

地球人公式按照 C 语言规则进行计算

火星人公式中 # 符优先级高于 $

相同的运算符按从左到右的顺序运算

输入

火星人字符串表达式结尾不带回车换行

输入的字符串说明

字符串为仅有无符号整数和操作符组成的计算表达式

  1. 用例保证字符串中操作数与操作符之间没有任何分隔符

  2. 用例保证操作数取值范围为 32 位无符号整数

  3. 保证输入以及计算结果不会出现整型溢出

  4. 保证输入的字符串为合法的求值报文
    例如: 123#4$5#76$78

  5. 保证不会出现非法的求值报文

例如:

  • #4$5 这种缺少操作数;
  • 4$5# 这种缺少操作数;
  • 4#$5 这种缺少操作数;
  • 4 $5 有空格;
  • 3+4-5*6/7 有其他操作符;
  • 12345678987654321$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

Code

import re

ps = '7#6$5#12'

fl = re.split('([#$])', ps)
# print(fl)
fl2, fl3 = [], 0
zt = 0

for i, v in enumerate(fl):
    if v == '#':
        zt = 1
    elif v == '$':
        zt = 0
        fl2.append('$')
    elif zt == 0:
        fl2.append(v)
    elif zt == 1:
        fl2.append(4 * int(fl2.pop()) + 3 * int(v) + 2)

# print(fl2)

for i, v in enumerate(fl2):
    if not fl3:
        fl3 = int(v)
    elif v != '$':
        fl3 = 2 * fl3 + int(v) + 3

print(fl3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值