Cod sursa(job #1639671)

Utilizator KOzarmOvidiu Badea KOzarm Data 8 martie 2016 13:17:38
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int i,k,n;
char x[100005];
struct el
{
    int nr;char semn;
}a[100005];
int scoatenr()
{
    int nr=0;
    while(x[i]>='0'&&x[i]<='9')
    {
        nr=nr*10+x[i]-'0';
        i++;
    }
    return nr;
}
void operatii2()
{
    if(a[k-1].semn=='*')
    {
        k--;
        a[k].nr*=a[k+1].nr;
        a[k+1].nr=0;
    }
    else
    if(a[k-1].semn=='/')
    {
        k--;
        a[k].nr/=a[k+1].nr;
        a[k+1].nr=0;
    }
}
void operatii1()
{
    if(a[k-1].semn=='-')
    {
        k--;
        a[k].nr-=a[k+1].nr;
        a[k+1].nr=0;
    }
    else
    if(a[k-1].semn=='+')
    {
        k--;
        a[k].nr+=a[k+1].nr;
        a[k+1].nr=0;
    }
}
void paranteza()
{
    a[k].semn='(';
    while(x[i]!=')')
    {
        i++;
        if(x[i]=='(')
            paranteza();
        else
            a[++k].nr=scoatenr();
        operatii2();
        if(x[i]==')')
        {
            while(a[k-1].semn!='(')
                operatii1();
        }
        else
            a[k].semn=x[i];
    }
    i++;
}
int main()
{
    fin.getline(x,100005);
    for(i=0;x[i]!=0;i++)
    if(x[i]=='(')
    {
        paranteza();
        operatii2();
        a[k].semn=x[i];
    }
    else
        {
            a[++k].nr=scoatenr();
            operatii2();
            a[k].semn=x[i];
        }
    while(k>1)
    {
        operatii1();
        operatii2();
    }
    fout<<a[1].nr;
    return 0;
}