Advertisement
Guest User

Untitled

a guest
May 19th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.math.BigInteger;
  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(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. break;
  55. }
  56. }
  57. }
  58. solveExpression(expression);
  59. }
  60.  
  61. static BigInteger evaluate(String s){
  62. BigInteger result = BigInteger.ZERO;
  63. BigInteger firstNumber;
  64. BigInteger secondNumber;
  65. String[] numbers;
  66. if(s.contains("+")){
  67. numbers = s.split("\\+");
  68. firstNumber = new BigInteger(numbers[0]);
  69. secondNumber = new BigInteger(numbers[1]);
  70.  
  71. result = firstNumber.add(secondNumber);
  72. } else if(s.contains("-") && !s.contains("+") && !s.contains("*")){
  73. numbers = s.split("\\-");
  74. firstNumber = new BigInteger(numbers[0]);
  75. secondNumber = new BigInteger(numbers[1]);
  76.  
  77. result = firstNumber.subtract(secondNumber);
  78. }else if(s.contains("*")){
  79. numbers = s.split("\\*");
  80. firstNumber = new BigInteger(numbers[0]);
  81. secondNumber = new BigInteger(numbers[1]);
  82.  
  83. result = firstNumber.multiply(secondNumber);
  84. }
  85.  
  86. return result;
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement