Problema 4 (recursivo)
Crie um programa que produza o resultado da operação de adição / subtração de entrada.
• Todos os números a serem inseridos são inteiros. • Use "+" (soma) e "-" (diferença) como símbolos aritméticos. • A fórmula da operação deve realizar pelo menos uma operação e pode realizar uma pluralidade de operações. • Assumindo a notação da operação de quatro regras, a operação a ser executada primeiro deve ser incluída entre "(" e ")", e a estrutura aninhada também é possível. [Correto: 23 + 58 + 7 - (10 + 3) - (3 - (5 + 4 - (8 - 2)))] • Incluindo números negativos. No caso de um número negativo, insira adicionando "-" (menos) sem inserir um espaço em branco imediatamente antes do valor numérico, e o intervalo do valor numérico é de -10000 a 10000. • O inverso do valor que pode ser obtido no meio da operação é de -10000 a 10000.
Exemplo de entrada
23 + 58 + 7- (10 + 3) - (3 --2- (5 + 4- (8 --2) + 8)))
Exemplo de saída
85
Resposta / Explicação:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// Importar parâmetros de entrada
String input = br.readLine();
String[] param = input.split(" ");//Valor de entrada em branco
int sum = calc(param,0,param.length - 1) ;
System.out.println(sum);
}
public static int calc(String[] param, int startIdx, int endIdx){
int sum = 0 ;
String type = null ;
for(int idx = startIdx ; idx < endIdx + 1 ; idx ++){
if(param[idx].equals("+") || param[idx].equals("-")){
type = param[idx] ;
}else if(param[idx].equals("(")){
int endOfFormula = checkEndOfFormula(param,idx) ;//③
if(type != null){
if(type.equals("+")){
sum = sum + calc(param, idx + 1 , endOfFormula - 1);//①
}else if(type.equals("-")){
sum = sum - calc(param, idx + 1 , endOfFormula - 1);//②
}
}else{
sum = calc(param, idx + 1 , endOfFormula - 1) ;
}
idx = endOfFormula ;
}else{
int num = Integer.parseInt(param[idx]);
if(type != null){
if(type.equals("+")){
sum = sum + num;
}else if(type.equals("-")){
sum = sum - num;
}
}else{
sum = num ;
}
}
}
return sum ;
}
//Encontre o final dos parênteses "("
public static int checkEndOfFormula(String[] param, int startIdx){
int end = startIdx + 1;
int startCount = 0 ;
for(int idx = startIdx + 1 ; idx < param.length; idx ++){
end = idx ;
if(param[idx].equals("(")){
startCount ++ ;//④
}else if(param[idx].equals(")")){
if(startCount == 0){
break ;
}else{
startCount -- ;//⑤
}
}
}
return end ;
}
}