Cod sursa(job #449171)
#include<iostream>
#include<fstream>
using namespace std;
#define LL long long
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100009];
int val[30],pos;
void citire();
LL eval_exp(int&);
LL eval_termen(int&);
LL eval_factor(int&);
int main()
{
citire();
g<<eval_exp(pos);
f.close();
g.close();
return 0;
}
LL eval_factor(int &pos)
{
LL v=0;
if (s[pos]>='0'&&s[pos]<='9')
{
while (s[pos]>='0'&&s[pos]<='9')
{
v=v*10+(s[pos]-'0');
++pos;
}
return v;
}
++pos;
v=eval_exp(pos);
++pos;
return v;
}
LL eval_termen(int &pos)
{
LL f1=eval_factor(pos),f2;
char semn;
if (s[pos]=='*'||s[pos]=='/')
while (s[pos]=='*'||s[pos]=='/')
{
semn=s[pos];
++pos;
f2=eval_factor(pos);
if (semn=='*')
f1*=f2;
else f1/=f2;
}
return f1;
}
LL eval_exp(int &pos)
{
LL t1=eval_termen(pos),t2;
char semn;
if(s[pos]=='+'||s[pos]=='-')
while (s[pos]=='+'||s[pos]=='-')
{
semn=s[pos];
++pos;
t2=eval_termen(pos);
if (semn=='-')
t1-=t2;
else
t1+=t2;
}
return t1;
}
void citire()
{
char x;
int v,pos;
f.getline(s,100009);
}