Cod sursa(job #2264287)

Utilizator Katherine456719Swan Katherine Katherine456719 Data 19 octombrie 2018 23:24:42
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>

#include <fstream>

#include <cctype>

#include <cstring>

using namespace std;

ifstream f("evaluare.in");

ofstream g("evaluare.out");

const int NMAX=100001;

int pr(char c) {

switch(c) {

case '+':

return 1;

case '-':

return 1;

case '*':

return 2;

case '/':

return 3;

}

}

int main() {

char op[NMAX/2+5],c;

long int val[NMAX/2+5],top=0,top1=0,nr=0,n;

char s[NMAX+5];

f.getline(s,NMAX+5);

n=strlen(s);

int i=0;

while(i<n) {

if(isdigit(s[i])) {

while(isdigit(s[i]) && i<n) {

nr=nr*10+(s[i]-'0');

i++;

}

val[++top1]=nr;

nr=0;

i--;

} else {

if(s[i]==')') {

while(op[top]!='(' && top>0) {

switch(op[top]) {

case '+': {

val[top1-1]=val[top1]+val[top1-1];

top1--;

break;

}

case '-': {

val[top1-1]=val[top1-1]-val[top1];

top1--;

break;

}

case '*' : {

val[top1-1]=val[top1]*val[top1-1];

top1--;

break;

}

case '/': {

val[top1-1]=val[top1-1]/val[top1];

top1--;

break;

}

}

op[top--]=NULL;

}

op[top--]=NULL;

} else if((pr(s[i])>pr(op[top])) || top==0 || op[top]=='(')

op[++top]=s[i];

else {

while(top>0 && pr(s[i])<=op[top]) {

switch(op[top]) {

case '+': {

val[top1-1]=val[top1-1]+val[top1];

top1--;

break;

}

case '-': {

val[top1-1]=val[top1-1]-val[top1];

top1--;

break;

}

case '*' : {

val[top1-1]=val[top1-1]*val[top1];

top1--;

break;

}

case '/': {

val[top1-1]=val[top1-1]/val[top1];

top1--;

break;

}

}

op[top--]=NULL;

}

}

g<<val[top1];

return 0;

}