Задача 03. Simple Expression от Java Basics Exam - 1 June 2014 - Недостатъчна памет.
Здравейте, става дума за задача 03. Simple Expression от тук, и не само. Интересува ме защо при един и същ код понякога ми показва грешка за недостатъчна памет, дори и с примерното решение, което е дадено със задачата, а понякога не. Това заради кода ли е или заради системата за проверка?
Това е първоначалното ми решение, което от 10 опита само веднъж тръгна.
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String inputString = scan.nextLine();
scan.close();
inputString = inputString.replaceAll(" ", "");
String[] arrayString = inputString.split("(\\+)|((?<=-)|(?=-))");
BigDecimal sum= new BigDecimal(0);
boolean plus = true;
for(String temp: arrayString){
if(temp.equals("-")){
plus = false;
} else {
sum = plus ? sum.add(BigDecimal.valueOf(Double.parseDouble(temp))): sum.subtract(BigDecimal.valueOf(Double.parseDouble(temp)));
plus = true;
}
}
System.out.print(sum.toPlainString());
}
}
Това е примерното решение, което също показва грешка, но по-рядко.
import java.math.BigDecimal;
import java.util.Scanner;
public class SimpleExpression {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String expression = scanner.nextLine();
expression = expression.replace(" ", "");
String[] numbers = expression.split("[^0-9.]+");
String[] operators = expression.split("[0-9.]+");
BigDecimal sum = new BigDecimal(numbers[0]);
for (int i = 1; i < operators.length; i++) {
BigDecimal number = new BigDecimal(numbers[i]);
if (operators[i].equals("+")) {
sum = sum.add(number);
} else if (operators[i].equals("-")) {
sum = sum.subtract(number);
} else {
throw new IllegalArgumentException(
"Invalid operator: " + operators[i]);
}
}
System.out.println(sum.toPlainString());
}
}