0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# 解决华为机试:表达式求值

1.简述:

描述

给定一个字符串描述的算术表达式,计算出结果值。

输入字符串长度不超过 100 ,合法的字符包括 ”+, -, *, /, (, )” , ”0-9” 。

数据范围:运算过程中和最终结果均满足 |val| \le 2^{31}-1 \∣val∣≤231−1  ,即只进行整型运算,确保输入的表达式合法

输入描述:

输入算术表达式

输出描述:

计算出结果值

示例1

输入:

400+5

复制输出:

405

2.代码实现:

import java.util.*;

public class Main{
public static void main(String[] srgs){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
process(str);
}
}

public static void process(String str){
String s1 = str.replace("[","(");
String s2 = s1.replace("]",")");
String s3 = s2.replace("{","(");
String s4 = s3.replace("}",")");
int res = solve(s4);
System.out.println(res);
}

public static int solve(String s){
if(s==null||s.length()==0) return 0;
Stack<Integer> stack = new Stack<>();
char[] chs = s.toCharArray();
int len = s.length(), number=0;
char sign = '+';
for(int i=0;i<len;i++){
char c = chs[i];
if(c==' ') continue;
if(Character.isDigit(c)){
number = number*10 + c-'0';
}
if(c=='('){
int j=i+1, count=1;
while(count>0){
if(chs[j]==')') count--;
if(chs[j]=='(') count++;
j++;
}
number = solve(s.substring(i+1,j-1));
i=j-1;
}
if(!Character.isDigit(c)||i==len-1){
if(sign=='+'){
stack.push(number);
}else if(sign=='-'){
stack.push(-1*number);
}else if(sign=='*'){
stack.push(stack.pop()*number);
}else if(sign=='/'){
stack.push(stack.pop()/number);
}
sign = c;
number = 0;
}
}
int ans = 0;
while(!stack.isEmpty()){
ans += stack.pop();
}
return ans;
}
}


举报

相关推荐

0 条评论