题目
解题思路
四则运算的方法:从左到右,先乘除后加减。所以可以使用for循环遍历先找出乘除符号计算,然后再找加减符号计算。
首先把24点字符串处理成列表。如:“9+3+3x4” 处理成[9,+,3,+,3,x,4].
之后遍历列表先找出乘除号计算–>[9,+,3,+,12];
然后找出加减号计算–>[12,+,12]–>[24]
最后列表中就剩下最终的计算结果了。
代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
for(int j=0;j<n;j++) {
String co=input.next();
List<String> strs=new ArrayList<>();
String f="";
for(int i=0;i<co.length();i++) {
if(i==0 && String.valueOf(co.charAt(i)).equals("-")) {
f="-";
continue;
}
if(String.valueOf(co.charAt(i)).matches("(\\d+)|(\\.)")) {
f=f+String.valueOf(co.charAt(i));
}else {
strs.add(f);
strs.add(String.valueOf(co.charAt(i)));
f="";
}
}
strs.add(f);
if(number(strs,0)==24) {
System.out.println("Yes");
}else {
System.out.println("No");
}
}
}
private static int number(List<String> n,int v) {
int con = 0;
int j=0;
con=Integer.valueOf(n.get(0));
if(v==0) {
for(int i=0;i<n.size();i++) {
if(n.get(i).matches("(\\-|)?\\d+(\\.\\d+)?$")) {
con=Integer.valueOf(n.get(i));
if(n.size()>i+1) {
j=i+1;
}
}
if(n.get(j).equals("x")){
n.set(i, String.valueOf(con*Integer.valueOf(n.get(i+2))));
n.remove(i+1);
n.remove(i+1);
return number(n,0);
}else if(n.get(j).equals("/")){
n.set(i, String.valueOf(con/Integer.valueOf(n.get(i+2))));
n.remove(i+1);
n.remove(i+1);
return number(n,0);
}
}
}
for(int i=0;i<n.size();i++) {
if(n.get(i).matches("(\\-|)?\\d+(\\.\\d+)?$")) {
con=Integer.valueOf(n.get(i));
if(n.size()>i+1) {
j=i+1;
}
}
if(n.get(j).equals("+")){
n.set(i, String.valueOf(con+Integer.valueOf(n.get(i+2))));
n.remove(i+1);
n.remove(i+1);
return number(n,1);
}else if(n.get(j).equals("-")){
n.set(i, String.valueOf(con-Integer.valueOf(n.get(i+2))));
n.remove(i+1);
n.remove(i+1);
return number(n,1);
}
}
return con;
}
}
稍微修改之后可以用于制作一个简易的计算器