Cod sursa(job #1921997)

Utilizator cristibogdanPatrascu Cristian cristibogdan Data 10 martie 2017 15:36:43
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.9 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005],st2[100005];
int i,n,st1[100005],pr[300],vf1,vf2,nr,k,ok;
int calcul (int a,int b,char c){
    if(c=='+')
        return a+b;
    if(c=='-')
        return a-b;
    if(c=='*')
        return a*b;
    if(c=='/')
        return a/b;
    }
int main()
{
pr[')']=0;
pr['+']=1;
pr['-']=1;
pr['*']=2;
pr['/']=2;
   f>>s+1;
   n=strlen(s+1);
   for(i=1;i<=n;i++){
        if('0'<=s[i]&&s[i]<='9'){
            nr=nr*10+s[i]-'0';
        ok=1;}
        else{
            if(nr!=0){
                st1[++vf1]=nr;
                nr=0;
                ok=0;}
                if(s[i]=='(')
                    st2[++vf2]='(';
                    else{
                        if(s[i]==')'){
                            while(vf1>0&&st2[vf2]!='('){
                                k=calcul(st1[vf1-1],st1[vf1],st2[vf2]);
                                vf1--;
                                vf2--;
                                st1[vf1]=k;
                            }
                            vf2--;
                        }
                            else{
                                while(vf1>0&&pr[s[i]]<=pr[st2[vf2]]){
                                    k=calcul(st1[vf1-1],st1[vf1],st2[vf2]);
                                    vf1--;
                                    vf2--;
                                    st1[vf1]=k;
                                }
                                    st2[++vf2]=s[i];
                                    }}}}
            if(ok==1)
                st1[++vf1]=nr;
                while(vf2>0){
                    k=calcul(st1[vf1-1],st1[vf1],st2[vf2]);
                    vf1--;
                    vf2--;
                    st1[vf1]=k;
                }
        g<<st1[1];
    return 0;
}