华为机试四则运算
四则运算
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