Cod sursa(job #1922006)

Utilizator cristibogdanPatrascu Cristian cristibogdan Data 10 martie 2017 15:38:34
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.71 kb
#include<fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int nr,st1[100001],vf1,vf2,ok,k,n,i;
char s[100002],pr[256],st2[100001];
int calcul(char x,int a, int b){
            if(x=='+')
            return b+a;
            if(x=='-')
            return b-a ;
            if(x=='*')
            return b*a;
            if(x=='/')
            return b/a;}

int main()
{ok=0;
pr[')']=0;
pr['+']=1;
pr['-']=1;
pr['*']=2;
pr['/']=2;;
    f>>s+1;
n=strlen(s+1);
for(i=1;i<=n;i++){
    if(s[i]>='0'&&s[i]<='9'){
            nr=nr*10+s[i]-'0';
        ok=1;}
    else{
        if(ok==1){
            st1[++vf1]=nr;
            nr=0;
            ok=0;}
        if(s[i]=='(')
           st2[++vf2]='(';
           else{
                if(s[i]==')'){
                    while(vf1>0&&st2[vf2]!='('){

                        k=calcul(st2[vf2],st1[vf1],st1[vf1-1]);
                        vf1--;
                        vf2--;
                        st1[vf1]=k;
                        }
                        vf2--;
                       }
                else{
                    while(vf1>0&&pr[s[i]]<=pr[st2[vf2]]){
                            k=calcul(st2[vf2],st1[vf1],st1[vf1-1]);
                            vf1--;
                            vf2--;
                            st1[vf1]=k;}
                            st2[++vf2]=s[i];}}}}
            if(ok==1){
                st1[++vf1]=nr;
                ok=0;
                nr=0;}
                while(vf2>0){
                    k=calcul(st2[vf2],st1[vf1],st1[vf1-1]);
            vf2--;
            vf1--;
            st1[vf1]=k;
        }
g<<st1[1];
    return 0;
}