Cod sursa(job #1929953)

Utilizator mircearoataMircea Roata Palade mircearoata Data 18 martie 2017 12:52:28
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>

using namespace std;

string problema = "evaluare";

ifstream in(problema+".in");
ofstream out(problema+".out");

char s[100100];
int pos;

int termen();
int factor();

int eval()
{
    int t = termen();
    while(s[pos] == '+' || s[pos] == '-')
    {
        if(s[pos] == '+')
        {
            pos++;
            t+=termen();
        }
        else if(s[pos] == '-')
        {
            pos++;
            t-=termen();
        }
    }
    return t;
}

int termen()
{
    int r = factor();
    while(s[pos] == '*' || s[pos] == '/')
    {
        if(s[pos] == '*')
        {
            pos++;
            r*=factor();
        }
        else if(s[pos] == '/')
        {
            pos++;
            r/=factor();
        }
    }
    return r;
}

int factor()
{
    int num=0;
    if(s[pos]=='(')
    {
        pos++;
        num=eval();
        pos++;
    }
    else
        while(s[pos]>='0'&&s[pos]<='9')
        {
            num=num*10+(s[pos]-'0');
            pos++;
        }
    return num;
}

int main()
{
    in.getline(s,100100);
    out<<eval();
    return 0;
}