Advertisement
Guest User

Untitled

a guest
May 19th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.math.BigDecimal;
  5. import java.util.Stack;
  6.  
  7. public class Solve {
  8. public static void main(String[] args) throws IOException {
  9. BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
  10. String expression = userInput.readLine();
  11.  
  12. //System.out.println(evaluate(expression));
  13.  
  14. solveExpression(expression);
  15. }
  16.  
  17. static char openBracket = '(';
  18. static char closeBracket = ')';
  19. static String innerExpression = "";
  20. static String tempResult;
  21. static int startIndex = 0;
  22. static int endIndex = 0;
  23.  
  24. private static void solveExpression(String expression) {
  25. if (expression.matches("\\d*")) {
  26. System.out.println(Integer.parseInt(expression));
  27. return;
  28. }
  29.  
  30. if (!expression.contains(String.valueOf(openBracket)) && !expression.contains(String.valueOf(closeBracket))) {
  31. System.out.println(evaluate(expression));
  32. return;
  33. }
  34.  
  35. Stack<Character> parenthesisOccurrence = new Stack<>();
  36. Stack<Integer> parenthesisIndexes = new Stack<>();
  37.  
  38. for (int i = 0; i < expression.length(); i++) {
  39. char c = expression.charAt(i);
  40. if (c == openBracket) {
  41. parenthesisOccurrence.push(c);
  42. parenthesisIndexes.push(i);
  43. } else {
  44. if (parenthesisOccurrence.size() > 0
  45. && c == closeBracket
  46. && parenthesisOccurrence.peek() == openBracket) {
  47. startIndex = parenthesisIndexes.peek();
  48. endIndex = i + 1;
  49.  
  50. innerExpression = expression.substring(startIndex, endIndex);
  51. tempResult = innerExpression.split("[\\(\\)]")[1];
  52.  
  53. expression = expression.replace(expression.substring(startIndex, endIndex), String.valueOf(evaluate(tempResult)));
  54. //System.out.println(expression);
  55. break;
  56. }
  57. }
  58. }
  59.  
  60. solveExpression(expression);
  61. }
  62.  
  63.  
  64. static BigDecimal evaluate(String s){
  65. BigDecimal result = BigDecimal.valueOf(0);
  66. BigDecimal firstNumber;
  67. BigDecimal secondNumber;
  68. String[] numbers;
  69. if(s.contains("+")){
  70. numbers = s.split("\\+");
  71. firstNumber = new BigDecimal(numbers[0]);
  72. secondNumber = new BigDecimal(numbers[1]);
  73.  
  74. result = firstNumber.add(secondNumber);
  75. } else if(s.contains("-") && !s.contains("+") && !s.contains("*")){
  76. numbers = s.split("\\-");
  77. firstNumber = new BigDecimal(numbers[0]);
  78. secondNumber = new BigDecimal(numbers[1]);
  79.  
  80. result = firstNumber.subtract(secondNumber);
  81. }else if(s.contains("*")){
  82. numbers = s.split("\\*");
  83. firstNumber = new BigDecimal(numbers[0]);
  84. secondNumber = new BigDecimal(numbers[1]);
  85.  
  86. result = firstNumber.multiply(secondNumber);
  87. }
  88.  
  89. return result;
  90. }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement