Advertisement
Dev-san

Untitled

Oct 28th, 2014
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.71 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3.  
  4. public class ArithmeticExpression {
  5.    
  6.     // funkcija za presmetuvanje na izrazot pocnuvajki
  7.     // od indeks l, zavrsuvajki vo indeks r
  8.    
  9.     static int evaluirajEdnostavenIzraz(String exp)
  10.     {
  11.         int operacija = '+';
  12.         int rezultat = 0;
  13.         int pc = exp.charAt(0);
  14.         for (int i = 0; i < exp.length(); i++)
  15.         {
  16.             char c = exp.charAt(i);
  17.             if (Character.isDigit(pc)&&(c == '+' || c == '-'))
  18.             {
  19.                 operacija = c;
  20.                 String a = exp.substring(0, i);
  21.                 String b = exp.substring(i+1, exp.length());
  22.  
  23.                 //System.out.println("A: " + a + ", B: " + b);
  24.                 if (operacija == '+')
  25.                     rezultat = Integer.parseInt(a) + Integer.parseInt(b);
  26.                 else
  27.                     rezultat = Integer.parseInt(a) - Integer.parseInt(b);
  28.                 //System.out.printf("%s %c %s = %d\n", a, operacija, b, rezultat);
  29.                 break;
  30.             }
  31.             pc = c;
  32.         }
  33.        
  34.         return rezultat;
  35.     }
  36.    
  37.     static int presmetaj(char c[], int l, int r) {
  38.         char pc = c[0];
  39.  
  40.         boolean lfmp = false; // looking for matching parenthesis
  41.         int p = 0, k = 0;
  42.         String exp = String.copyValueOf(c);
  43.         String orig = String.copyValueOf(c);
  44.         pc = orig.charAt(0);
  45.         for (int i = 0; i <= orig.length()-1; i++)
  46.         {
  47.             if (pc == '(' )
  48.             {
  49.                 lfmp = true;
  50.                 p = i;
  51.             }
  52.             else if (pc == ')' && lfmp)
  53.             {
  54.                 k = i;
  55.                 //System.out.print("Izraz: \n");
  56.                 String izraz = orig.substring(p, k-1);
  57.                
  58.                 int v = evaluirajEdnostavenIzraz(izraz);
  59.                 //System.out.println("Izraz: " + izraz);
  60.                 String pat = "\\Q(" + izraz + ")\\E";
  61.                 exp = exp.replaceAll(pat, Integer.toString(v));
  62.                 //System.out.printf("Replacing %s with %d\n", izraz, v);
  63.                 lfmp = false;  
  64.             }
  65.            
  66.             if (i == orig.length()-1)
  67.             {
  68.                 //System.out.printf("Orig: %s\nParsed: %s\n", orig, exp);
  69.                 if (orig == exp || orig.length() == 5)
  70.                 {
  71.                     orig = orig.replace("(", "");
  72.                     orig = orig.replace(")", "");
  73.                     int rez = evaluirajEdnostavenIzraz(orig);
  74.                     //System.out.printf("Rezultat: %d\n", rez);
  75.                     return rez;
  76.                 }
  77.                 i = 0;
  78.                 orig = exp;
  79.             }
  80.             pc = orig.charAt(i);
  81.         }
  82.         //System.out.println(exp);
  83.         return 0;
  84.     }
  85.    
  86.    
  87.     public static void main(String[] args) throws Exception {
  88.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  89.        
  90.         String expression = br.readLine();
  91.         char exp[] = expression.toCharArray();
  92.        
  93.         int rez = presmetaj(exp, 0, exp.length-1);
  94.         System.out.println(rez);
  95.  
  96.         br.close();
  97.        
  98.     }
  99.    
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement