Pagini recente » Cod sursa (job #1812971) | Cod sursa (job #2859876) | Cod sursa (job #1441098) | Cod sursa (job #1277267) | Cod sursa (job #2327761)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c[100005];
bool numar(int st)
{
if(c[st]>='0' && c[st]<='9')
return 1;
return 0;
}
int exp(int & st);
int prod(int a,int & st);
int nr(int & st)
{
int a=c[st]-'0';
while(numar(st+1) && st<=strlen(c))
{
st++;
a=a*10+c[st]-'0';
}
return a;
}
int prod(int a,int & st)
{
int t=0;
st+=2;
while( (((numar(st)) || (c[st]=='(')) && st<=strlen(c)) && (c[st-1]=='*' || c[st-1]=='/'))
{
if(c[st]>='0' && c[st]<='9')
{
if(c[st-1]=='/')
{
t=nr(st);
a/=t;
}
if(c[st-1]=='*')
{
t=nr(st);
a*=t;
}
}
else if(c[st]=='(')
{
if(c[st-1]=='/')
{
t=exp(st);
a/=t;
}
if(c[st-1]=='*')
{
t=exp(st);
a*=t;
}
}
st+=2;
}
st-=2;
return a;
}
int exp(int & st)
{
int a=0,s=0;
st++;
while(c[st]!=')')
{
if(numar(st))
{
a=nr(st);
a=prod(a,st);
s+=a;
if(c[st]==')')
return s;
}
else if(c[st]=='(')
{
a=exp(st);
a=prod(a,st);
s+=a;
st++;
if(c[st]==')')
return s;
}
st++;
}
return s;
}
int main()
{
in.getline(c+1,100005);
c[0]='(';
c[strlen(c)]=')';
int ind=0;
out<<exp(ind);
return 0;
}