Cod sursa(job #2148941)

Utilizator Tudor27Tudor Iacob Tudor27 Data 2 martie 2018 10:36:56
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,p;
char v[100002];

int suma();
int produs();

void citeste(){
    while(!fin.eof()){
        fin>>v[n];
        n++;
    }
}

int getnr(){
    int a=0;
    while(p<n&&v[p]-'0'>=0&&v[p]-'0'<=9){
        a=a*10+(v[p]-'0');
        p++;
    }
    p--;
    return a;
}

int produs(){
    int t=1;
    char o='*';
    while(p<n&&v[p]!=')'&&v[p]!='+'&&v[p]!='-'){
        if(v[p]=='*'||v[p]=='/'){
            o=v[p];
            p++;
        }
        if(o=='/'){
            if(v[p]=='('){
                p++;
                t/=suma();
                p++;
            }
            else{
                t/=getnr();
            }
        }
        if(o=='*'){
            if(v[p]=='('){
                p++;
                t*=suma();
                p++;
            }
            else{
                t*=getnr();
            }
        }
        p++;
    }
    return t;
}

int suma(){
    int s=0;
    char o='+';
    while(v[p]!=')'&&p<n){
        if(v[p]=='+'||v[p]=='-'){
            o=v[p];
            p++;
        }
        if(o=='-'){
            s-=produs();
        }
        if(o=='+'){
            s+=produs();
        }
    }
    return s;
}

int main()
{
    citeste();
    fout<<suma();
    return 0;
}