package test;
import java.util.Scanner;
/**
*
* 2017年4月22日
*
9 1 - 4 / 4 - 1 * 2
5 9 + 2 * 5
5 5 * -2 + 2
13 9 * ( 7 + 3 ) / ( 2 + 2 )
#1 -4
#2 55
#3 -8
#4 22
*/
public class Solution05 {
static boolean logger=false;
public static void main(String[] args) {
//String str="9 1 - 4 / 4 - 1 * 2";
//System.out.println(process("9 * ( 7 + 3 ) / ( 2 + 2 )"));
Scanner sc=new Scanner(System.in);
int test_case=4;
int result[]=new int[test_case];
for(int t=0;t<test_case;t++){
int size=sc.nextInt();
String str=sc.nextLine();
result[t]=process(str);
}
for(int t=0;t<test_case;t++){
System.out.println("#"+(t+1)+" "+result[t]);
}
sc.close();
}
public static int process(String str){
while(str.indexOf("(") >-1){//有括号
int startIndex=str.indexOf("(");//找到括号的开始
int endIndex=str.indexOf(")");//找到括号的结束
if(logger) System.out.println(str+" => "+startIndex+ " "+endIndex );
String frontString=str.substring(0,startIndex);
String middleString=str.substring(startIndex+2, endIndex-1);//开始要跳过左括号和空格,所以要加2,结束不需要括号,所以要减1
String endString=str.substring(endIndex+1,str.length());//结束要从右括号后+1
if(logger) System.out.println(middleString);
str=frontString+processPlain(middleString)+endString;
}
return processPlain(str);
}
/**
* 只处理不带括号的
* @param str
* @return
*/
public static int processPlain(String str){
str=str.trim();
String[] strArray=str.split(" ");
double result=0;
for(int i=0;i<strArray.length;i=i+2){//每次接收两个
String sope;//操作符
double snum;//操作后紧跟的数字
if(i==0){
sope="+";
snum=Double.parseDouble(strArray[i]);
i--;//第一个不要操作符,要回退下
}else{
sope=strArray[i];
snum=Double.parseDouble(strArray[i+1]);
}
result=operate(result,sope,snum);
}
return (int)result;
}
private static double operate(double result, String sope, double snum) {
if("+".equals(sope)){
result=result+snum;
}else if("-".equals(sope)){
result=result-snum;
}else if("*".equals(sope)){
result=result*snum;
}else if("/".equals(sope)){
result=result/snum;
}
result=Math.floor(result);
return result;
}
}
按照顺序四则运算
最新推荐文章于 2021-03-05 21:19:26 发布