Cod sursa(job #384272)
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char e[101000];
long long int i,lg;
long long int k=0;
void Citire();
long long int eval(char);
long long int Evaluare_Expresie();
long long int Evaluare_Factor();
long long int Evaluare_Termen();
int main()
{
Citire();
lg=strlen(e);
fout<<Evaluare_Expresie();
return 0;
}
void Citire()
{
fin.getline(e,101000);
return;
}
long long int eval(char c)
{
long long int sc=0;
k=i;
while(e[k]<='9' && e[k]>='0')
{
sc=sc*10+e[k]-'0';
k++;
}
return sc;
}
long long int Evaluare_Factor()
{
long long int f;
if(e[i]=='(')
{
i++;
f=Evaluare_Expresie();
i++;
}
else
{
f=eval(e[i]);
if(k-i>=2)
i=k;
else
i++;
}
return f;
}
long long int Evaluare_Termen()
{
long long int f=Evaluare_Factor();
while( (e[i]=='*' || e[i]=='/') && i<lg)
{
if(e[i]=='*')
{
i++;
f*=Evaluare_Factor();
}
else
if(e[i]=='/')
{
i++;
f/=Evaluare_Factor();
}
}
return f;
}
long long int Evaluare_Expresie()
{
long long int t=Evaluare_Termen();
while(i<lg && (e[i]=='+' || e[i]=='-'))
{
if(e[i]=='+')
{
i++;
t+=Evaluare_Termen();}
else
if(e[i]=='-')
{
i++;
t-=Evaluare_Termen();}
}
return t;
}