华为机试四则运算

四则运算

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

全部评论

相关推荐

4 收藏 评论
分享
牛客网
牛客企业服务