Cod sursa(job #1909541)

Utilizator Andrei2000Andrei Mihailescu Andrei2000 Data 7 martie 2017 13:01:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.01 kb
/*#include <bits/stdc++.h>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char *sir=new char[100002];
double termen();
double factor();

double eval(){
    double  r=termen();
    while(*sir=='+' || *sir =='-'){
        switch(*sir){
            case '+':
                sir++;
                r+=termen();
                break;
            case '-':
                sir++;
                r-=termen();
                break;
        }
    }
    return r;
}

double termen(){
    double  r=factor();
    while(*sir=='*' || *sir =='/'){
        switch(*sir){
            case '*':
                sir++;
                r*=factor();
                break;
            case '/':
                sir++;
                r/=factor();
                break;
        }
    }
    return r;
}

double factor(){
    double  r=0;
    if(*sir=='('){
        sir++;
        r=eval();
        sir++;
    }
    else {
        while(*sir>='0' && *sir<='9')
            r=r*10+*(sir++)-'0';
    }
    return r;
}

int main()
{
    fin.get(sir,100002);
    fout<<eval();
    return 0;
}
*/
#include <bits/stdc++.h>
#define H 2
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char *sir=new char[100002];
char *sirh[3]={"+-","*/",""};

long long result(long long x, long long y, char z){
    switch(z){
        case '+':return x+y;
        case '-':return x-y;
        case '*':return x*y;
        case '/':return x/y;
    }
}

long long eval(int h){
    long long r=0,y;
    if(h==H){
        if(*sir=='('){
              sir++;
              r=eval(0);
              sir++;
        }
        else{
            while(*sir >='0' && *sir<='9')
                r=r*10+*sir++-'0';
        }
    }
    else{
        for(r=eval(h+1);strchr(sirh[h],*sir) && *sir;)
            r=result(r,eval(h+1),*sir++);
    }
    return r;
}

int main()
{
    fin.get(sir,100002);
    fout<<eval(0);
    return 0;
}