Pagini recente » Cod sursa (job #1357643) | Cod sursa (job #791375) | Cod sursa (job #2324686) | Cod sursa (job #3286061) | Cod sursa (job #2324536)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c[100005];
int nr(int & st)
{
int a=c[st]-'0';
while('0'<=c[st+1] && c[st+1]<='9' && st<=strlen(c))
{
++st;
a=a*10+(c[st]-'0');
}
return a;
}
int prod(int & st,int a)
{
++st;
while((c[st]=='*' || c[st]=='/') && st<=strlen(c) && c[st+1]!='(')
{
if(c[st]=='/')
{
++st;
a=a/nr(st);
}
if(c[st]=='*')
{
++st;
a=a*nr(st);
}
st++;
}
st--;
return a;
}
int evaluare(int & st)
{
int a=0;
int s=0;
while(c[st+1]!=')')
{
++st;
if(c[st]=='(')
{
a=evaluare(st);
++st;
a=prod(st,a);
if(c[st+1]=='+' || c[st+1]=='-' || c[st+1]==')')
{
s+=a;
}
}
else if(c[st]>='0' && c[st]<='9')
{
a=nr(st);
a=prod(st,a);
if(c[st+1]=='+' || c[st+1]=='-' || c[st+1]==')')
{
s+=a;
}
else if(c[st+2]=='(')
{
if(c[st+1]=='*')
{
st+=2;
a*=evaluare(st);
st++;
}
else if(c[st+1]=='/')
{
st+=2;
a/=evaluare(st);
st++;
}
s+=a;
}
}
}
return s;
}
int main()
{
in.getline(c+1,100005);
c[0]='(';
c[strlen(c)]=')';
int z=0;
out<<evaluare(z);
return 0;
}