Advertisement
Stamenco

АПС - Аритметички израз

Nov 3rd, 2020 (edited)
3,747
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.33 KB | None | 0 0
  1.  /* Аритметички израз */
  2. /* Даден е некој аритметички израз. Аритметичкиот израз е во облик (A+B) или (A-B) каде што А и B истовремено се други аритметички изрази или цифри од 0-9. Потребно е да го евалуирате дадениот израз.
  3.  
  4. Име на класата (Java): ArithmeticExpression */
  5.  
  6. /*
  7. Test cases:
  8. 1. (1+2)
  9. 2. ((4-9)+((8+1)-(1+1)))
  10. 3. ((5+6)-(2+2))
  11. 4. (((1+9)-((7+7)-(3+2)))+(2+4))
  12. 5. (((1+1)+(1+1))+((1+1)+(1+1)))
  13. 6. ((((1+2)+(3+4))+((5+6)+(7+8)))+(((8-7)-(6-5))-((4-3)-(2-1))))
  14. 7. ((1-2)+((3+2)+((6-3)+(7+5))))
  15. 8. (((1-1)+(2-2))-((1-1)+(2-2)))
  16. 9. ((((1+5)-(2-3))-(2-8))+((1+2)-((5+6)-(3-7))))
  17. 10. (((1+6)-(6-1))+(2+0))
  18.  
  19. Results:
  20. 1. 3
  21. 2. 2
  22. 3. 7
  23. 4. 7
  24. 5. 8
  25. 6. 36
  26. 7. 19
  27. 8. 0
  28. 9. 1
  29. 10. 4
  30. */
  31.  
  32.  
  33. import java.io.BufferedReader;
  34. import java.io.InputStreamReader;
  35.  
  36. public class ArithmeticExpression {
  37.    
  38.     // funkcija za presmetuvanje na izrazot pocnuvajki
  39.     // od indeks l, zavrsuvajki vo indeks r
  40.     static int presmetaj(char c[], int l, int r) {
  41.         if(r-l+1 == 5) {
  42.             if(c[l+2] == '+')
  43.                 return ((c[l+1] - '0') + (c[l+3] - '0'));
  44.             else if(c[l+2] == '-')
  45.                 return ((c[l+1] - '0') - (c[l+3] - '0'));
  46.         }
  47.        
  48.         int opened = 0, index = 0;
  49.        
  50.         for(int i = l; i < r; i++) {
  51.             if(c[i] == '(') opened++;
  52.             if(c[i] == ')') opened--;
  53.             if((c[i] == '+') || (c[i] == '-')) {
  54.                 if(opened == 1) {
  55.                     index = i;
  56.                     break;
  57.                 }
  58.             }
  59.         }
  60.        
  61.         if(c[index] == '+')
  62.             return presmetaj(c, l+1, index-1) + presmetaj(c, index+1, r-1);
  63.         else return presmetaj(c, l+1, index-1) - presmetaj(c, index+1, r-1);
  64.     }
  65.    
  66.     public static void main(String[] args) throws Exception {
  67.         int i,j,k;
  68.        
  69.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  70.        
  71.         String expression = br.readLine();
  72.         char exp[] = expression.toCharArray();
  73.        
  74.         int rez = presmetaj(exp, 0, exp.length-1);
  75.         System.out.println(rez);
  76.        
  77.         br.close();
  78.        
  79.     }
  80.    
  81. }
  82.  
  83.  
  84.  
  85.  
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement