Pagini recente » Cod sursa (job #485895) | Cod sursa (job #2080206) | Cod sursa (job #884984) | Cod sursa (job #1665110) | Cod sursa (job #2327800)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c[100005];
int exp(int & st);
int prod(int & st);
int eval(int & st);
int nr(int & st)
{
int a=0;
while(isdigit(c[st]) && st<=strlen(c))
{
a=a*10+c[st]-'0';
st++;
}
return a;
}
int prod(int & st)
{
int a=exp(st);
while(c[st]=='*' || c[st]=='/')
{
++st;
if(c[st-1]=='/')
{
a/=exp(st);
}
if(c[st-1]=='*')
{
a*=exp(st);
}
}
return a;
}
int exp(int & st)
{
if(c[st]!='(')
{
return nr(st);
}
else
{
++st;
int a=eval(st);
++st;
return a;
}
}
int eval(int & st)
{
int a=prod(st);
while(c[st] =='+' || c[st]=='-')
{
++st;
if(c[st-1]=='+')a+=prod(st);
else a-=prod(st);
}
return a;
}
int main()
{
in.getline(c+1,100005);
c[0]='(';
c[strlen(c)]=')';
int st=0;
out<<exp(st);
return 0;
}