华为机试四则运算
四则运算
http://www.nowcoder.com/questionTerminal/9999764a61484d819056f807d2a91f1e
声明:由于是牛客网的机试,所以这个计算器没有考虑小数点运算(不知道取几位小数),所以一下为整数运算
import re
def jisuan(s):
s=s.replace("+-","-").replace("--","+").replace("*-","a").replace("/-","b")
if s[0]=="-":s="0"+s
fu=re.findall(r"[*+-/ab]",s)[::-1]
mum=list(map(int,re.split(r'[*+-/ab]',s)))[::-1]
l,ll,lll=[],["+","-"],["*","/"]
for i in range(len(fu)-1,-1,-1):
if fu[i] =="a":
mum.insert(i,-mum.pop(i+1)*mum.pop(i))
del fu[i]
elif fu[i] =="b":
mum.insert(i,-mum.pop(i+1)/mum.pop(i))
del fu[i]
elif fu[i] =="*":
mum.insert(i,mum.pop(i+1)*mum.pop(i))
del fu[i]
elif fu[i] =="/":
mum.insert(i,mum.pop(i+1)/mum.pop(i))
del fu[i]
for i in range(len(fu)-1,-1,-1):
if fu[i] =="+":mum.insert(i,mum.pop(i+1)+mum.pop(i))
elif fu[i] =="-":mum.insert(i,mum.pop(i+1)-mum.pop(i))
return str(int(mum[0]))
def kuohao(kk,b,s):
l,ll,lll="","",[]
for i in range(len(s)):
if s[i]==kk:
ll+=s[i]
lll+=[len(ll)]
elif s[i]==b:
k=lll.pop(-1)
if len(lll)>=1:ll=ll[0:k-1]+jisuan(ll[k:])
else:
l+=jisuan(ll[k:])
ll=''
elif len(lll)==0:l+=s[i]
else:ll+=s[i]
return l
while True:
try:
print(int(jisuan(kuohao("{","}",kuohao("[","]",kuohao("(",")",input()))))))
except:
break
请实现如下接口
/* 功能:四则运算
* 输入:strExpression:字符串格式的算术表达式,如: "3+2*{1+2*[-4/(8-6)+7]}"
* 返回:算术表达式的计算结果
*/
public static int calculate(String strExpression)
{
/* 请实现*/
return 0;
} 约束:
pucExpression字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。
pucExpression算术表达式的有效性由调用者保证;
输入描述:
输入一个算术表达式
输出描述:
得到计算结果
示例1
输入
复制
3+2{1+2[-4/(8-6)+7]}
输出
复制
25
海康威视公司氛围 977人发布