Advertisement
Tashkovv

Untitled

Nov 18th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.66 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.NoSuchElementException;
  5. import java.util.Stack;
  6.  
  7. public class ExpressionEvaluator {
  8.     interface Stack<E>{
  9.         boolean isEmpty();
  10.         boolean isFull();
  11.         E peek();
  12.         void clear();
  13.         void push(E x);
  14.         E pop();
  15.     }
  16.  
  17.     static class SLLNode<E>{
  18.         SLLNode<E> succ;
  19.         E element;
  20.  
  21.         public SLLNode(E element, SLLNode<E> next) {
  22.             this.succ = next;
  23.             this.element = element;
  24.         }
  25.     }
  26.     static class LinkedStack<E> implements Stack<E> {
  27.  
  28.         //Stekot e pretstaven na sledniot nacin: top e link do prviot jazol
  29.         // na ednostrano-povrzanata lista koja sodrzi gi elementite na stekot .
  30.         private SLLNode<E> top;
  31.  
  32.         public LinkedStack () {
  33.             // Konstrukcija na nov, prazen stek.
  34.             top = null;
  35.         }
  36.  
  37.         public boolean isEmpty () {
  38.             // Vrakja true ako i samo ako stekot e prazen.
  39.             return (top == null);
  40.         }
  41.  
  42.         @Override
  43.         public boolean isFull() {
  44.             return false;
  45.         }
  46.  
  47.         public E peek () {
  48.             // Go vrakja elementot na vrvot od stekot.
  49.             if (top == null)
  50.                 throw new NoSuchElementException();
  51.             return top.element;
  52.         }
  53.  
  54.         public void clear () {
  55.             // Go prazni stekot.
  56.             top = null;
  57.         }
  58.  
  59.         public void push (E x) {
  60.             // Go dodava x na vrvot na stekot.
  61.             top = new SLLNode<E>(x, top);
  62.         }
  63.  
  64.         public E pop () {
  65.             // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  66.             if (top == null)
  67.                 throw new NoSuchElementException();
  68.             E topElem = top.element;
  69.             top = top.succ;
  70.             return topElem;
  71.         }
  72.  
  73.     }
  74.  
  75.     public static int evaluateExpression(String expression){
  76.         // Vasiot kod tuka
  77.         LinkedStack<Integer> stek=new LinkedStack<>();
  78.         int i=0;
  79.         while(i<expression.length()){
  80.             if(expression.charAt(i)=='*'){
  81.                 i++;
  82.                 int broj=expression.charAt(i)-'0';
  83.                 if(i+1==expression.length()){
  84.                     broj*=stek.pop();
  85.                     stek.push(broj);
  86.                     break;
  87.                 }
  88.                 while(Character.isDigit(expression.charAt(i+1))){
  89.                     i++;
  90.                     broj=broj*10 + expression.charAt(i)-'0';
  91.                     if(i+1==expression.length()){
  92.                         break;
  93.                     }
  94.                 }
  95.                 broj*=stek.pop();
  96.                 stek.push(broj);
  97.             }
  98.             else if(Character.isDigit(expression.charAt(i))) {
  99.                 int broj=expression.charAt(i)-'0';
  100.                 if(i==expression.length()-1) {
  101.                     stek.push(broj);
  102.                     break;
  103.                 }
  104.                 while(Character.isDigit(expression.charAt(i+1))){
  105.                     i++;
  106.                     broj=broj*10 + expression.charAt(i)-'0';
  107.                     if(i+1==expression.length()){
  108.                         break;
  109.                     }
  110.                 }
  111.                 stek.push(broj);
  112.             }
  113.             i++;
  114.         }
  115.         int rez=0;
  116.         while(!stek.isEmpty()) rez+=stek.pop();
  117.         return rez;
  118.     }
  119.     public static void main(String[] args) throws IOException {
  120.         BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
  121.         System.out.println(evaluateExpression(input.readLine()));
  122.     }
  123.  
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement