Cod sursa(job #1667383)

Utilizator CrystyAngelDinu Cristian CrystyAngel Data 28 martie 2016 21:32:03
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.96 kb
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
char v[100010],i;
int n;
int eval();
int produs(int st)
{
    int nr=0,j=1,s=1;
        s=st;
    while(v[i]!=')' && i<n && v[i]!='+' && v[i]!='-')
    {
        if(v[i]=='*')
        {
            i++;
            if(v[i]<='9' && v[i]>='0')
            {
                nr=0;
                while(v[i]<='9' && v[i]>='0')
                {
                    nr=nr*10+v[i]-'0';
                    i++;
                }
                s*=nr;
            }
            else if(v[i]=='(')
            {
                s*=eval();
            }
        }
        else
        {
            i++;
            if(v[i]<='9' && v[i]>='0')
            {
                nr=0;
                while(v[i]<='9' && v[i]>='0')
                {
                    nr=nr*10+v[i]-'0';
                    i++;
                }
                j*=nr;
            }
            else if(v[i]=='(')
            {
                i++;
                j*=eval();
            }
        }
    }
    return s/j;
}
int eval()
{
    int nr=0,ok=1,s=0;
    while(i<n && v[i]!=')')
    {
        if((v[i]<='9' && v[i]>='0' ) || v[i]=='+' || v[i]=='-')
        {
            nr=0;
            if(v[i]=='-')
                ok=-1;
            else
                ok=1;
            if(v[i]=='+' || v[i]=='-')
                i++;
            while(v[i]<='9' && v[i]>='0')
            {
                nr=nr*10+v[i]-'0';
                i++;
            }
            nr*=ok;
        }
        if(v[i]=='*' || v[i]=='/')
        {
            s+=produs(nr);
        }
        else if(v[i]=='(')
        {
            ++i;
            nr+=eval()*ok;
        }
        else
            s+=nr;
    }
    i++;
    return s;
}
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int main()
{
    f.getline(v,1000010);
    n=strlen(v);
    cout<<eval();

}