Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.NoSuchElementException;
- interface Stack<E> {
- // Elementi na stekot se objekti od proizvolen tip.
- // Metodi za pristap:
- public boolean isEmpty ();
- // Vrakja true ako i samo ako stekot e prazen.
- public E peek ();
- // Go vrakja elementot na vrvot od stekot.
- // Metodi za transformacija:
- public void clear ();
- // Go prazni stekot.
- public void push (E x);
- // Go dodava x na vrvot na stekot.
- public E pop ();
- // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
- }
- class ArrayStack<E> implements Stack<E> {
- private E [] elems; //niza na elementi koi odat od 0 do depth-1
- private int depth; //dlabochina na stekot
- public ArrayStack(int maxDepth){
- elems=(E[]) new Object[maxDepth]; //kreirash niza so maxDepth golemina
- depth=0;
- }
- public boolean isEmpty() {
- return depth==0;
- }
- @Override
- public E peek() {
- if(depth==0)
- throw new NoSuchElementException();
- return elems[depth-1]; //posledniot element se naogja na depth-1
- }
- @Override
- public void clear() {
- for (int i=0;i<depth;i++){
- elems[i]=null;
- }
- depth=0;
- }
- @Override
- public void push(E x) {
- elems[depth++]=x; //se dodava elementot na pozicija depth bidejki toa e naredno slobodno i se zgolemuva depth
- }
- @Override
- public E pop() {
- if(depth==0)
- throw new NoSuchElementException();
- E topmost=elems[--depth]; //depth e naredniot sloboden a --depth e posledniot element
- elems[depth]=null;
- return topmost;
- }
- }
- public class ExpressionEvaluator {
- public static int evaluateExpression(String expression){
- ArrayStack<Integer> stack=new ArrayStack<Integer>(100);
- String broj="";
- int flagM=0;
- for(int i=0;i<expression.length();i++){
- int pushed=0;
- char znak=expression.charAt(i);
- if(Character.isDigit(znak)){
- broj+=znak;
- if((i+1)==expression.length() || !Character.isDigit(expression.charAt(i+1))){
- stack.push(Integer.valueOf(broj).intValue());
- broj="";
- pushed=1;
- }
- }
- if(znak=='*'){
- flagM=1;
- continue;
- }
- if(flagM==1 && pushed==1){
- int num1=stack.pop();
- int num2=stack.pop();
- int result=num1*num2;
- stack.push(result);
- flagM=0;
- }
- }
- int suma=0;
- while (!stack.isEmpty()){
- suma+=stack.pop();
- }
- return suma;
- }
- public static void main(String[] args) throws IOException {
- BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
- System.out.println(evaluateExpression(input.readLine()));
- }
- }
Add Comment
Please, Sign In to add comment