Cod sursa(job #1226239)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 4 septembrie 2014 21:52:51
Problema Evaluarea unei expresii Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 2.05 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;

ifstream in("evaluare.in");
ofstream out("evaluare.out");

string s;

int i, x, y;
long n;
stack <char> S;
stack <int> R;

void sign(){
    
    x = R.top();
    
    R.pop();
    
    y = R.top();
    
    R.pop();
    
}

int main() {
    
    getline(in, s);
    
    n = s.size();
    
    s[n] = ' ';
     
     for (i = 0; i <= n; i++) {
     
         if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '(')
     
            S.push(s[i]);
     
         else if (s[i] >= '0' && s[i] <= '9') {
     
             x = 0;
     
             while (s[i] >= '0' && s[i] <= '9') {
     
                 x = x * 10 + int(s[i]) - 48;
     
                 if (s[i+1] >= '0' && s[i+1] <= '9') i++;
                 else break;
     
             }
     
             R.push(x);
     
             if (!S.empty()) {
     
                 if (S.top() == '*')
     
                     sign(),
                     
                     R.push(x * y),
     
                     S.pop();
     
                 else if (S.top() == '/')
     
                     sign(),
     
                     R.push(y / x),
     
                     S.pop();
     
             }
     
         } else {
             
             while (1) {
     
                 if (S.empty())
                     break;
                 
                 if (S.top() == '(') {
                     S.pop();
                     break;
                 }
                 
                 sign();
     
                 if (S.top() == '*')
                     
                     R.push(x*y);
     
                 else if (S.top() == '/')
     
                     R.push(y / x);
     
                 else if (S.top() == '+')
     
                     R.push(x + y);
     
                 else if (S.top() == '-')
     
                     R.push(y - x);
     
                 S.pop();
     
             }
     
         }
     
    }
    
    out << R.top() << "\n";
    
    return 0;
}