Cod sursa(job #1188710)

Utilizator andreey_047Andrei Maxim andreey_047 Data 20 mai 2014 13:47:54
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define Nmax 100009
using namespace std;
char a[Nmax];
int t[Nmax],n;
int Slark(int st,int dr){
 int i,j,sum=0,s;
 for(i = st; i<= dr; i++){
  if(t[i] >= 0){
    j=i+1;
    if(t[i-1] == -1 || i == st) s=t[i];
    else if(t[i-1] == -2) s=-t[i];
   while(t[j]!=-2 && t[j]!= -1 && j <= dr)
    if(t[j] >= 0){
     if(t[j-1] == -4) s*=t[j];
     else if(t[j-1]==-5) s/=t[j];
     j++;
    }
     sum+=s;
    i=j;
  }
 }
   return sum;
}
int main(){
    int i,j,p,q,c;
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);
    scanf("%s",&a);
    n = strlen(a);
    for(i = 0,c = 0; i < n; i++){
        j = i;
     if(a[i] == '(') t[c++] = -3;
     else if(a[i] == '-') t[c++] = -2;
     else if(a[i] == '+') t[c++] = -1;
     else if(a[i] == '*') t[c++] = -4;
     else if(a[i] == '/') t[c++] = -5;
     else if(a[i] >= '0' && a[i] <= '9'){
         p=0;
        while(a[j] >='0' && a[j] <='9')
          p=p*10+a[j++]-'0';
        t[c++] = p;
        j--;
     }
    else if(a[i] == ')'){
      q = c;
       while(t[q--]!=-3)
        ;
        q++;
      t[q] = Slark(q+1,i-1);
      c=q+1;
    }
     i = j;
    }
    cout << Slark(0,c-1);
//   for(i=0;i<c;i++)
//    cout << t[i]<<' ';
    return 0;
}