Pagini recente » Cod sursa (job #2943881) | Borderou de evaluare (job #1551180) | Cod sursa (job #3181715) | Cod sursa (job #360866) | Cod sursa (job #2530286)
#include <fstream>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int calcul(string s)
{
int i=0,ppp=0,okkk=0;
int p=0,ppl=-1,pmin=-1,pinm=-1,pdiv=-1,nr=0;
i=0;
ppp=0;
if(s[0]!='(')
okkk=1;
while(i<s.size())
{
if(ppp==0 and okkk==1)
okkk=-1;
if(s[i]=='(' and okkk!=-1)
++ppp,okkk=1;
else if(s[i]==')' and okkk!=-1)
--ppp,okkk=1;
if(s[i]>='0' and s[i]<='9')
nr=nr*10+s[i]-'0';
else if(p==0 and s[i]=='+')
ppl=i;
else if(p==0 and s[i]=='-')
pmin=i;
else if(p==0 and s[i]=='*')
pinm=i;
else if(p==0 and s[i]=='/')
pdiv=i;
else if(s[i]=='(')
++p;
else if(s[i]==')')
--p;
++i;
}
if(okkk==1)
return calcul(s.substr(1,s.size()-2));
if(ppl!=-1)
return calcul(s.substr(0,ppl))+calcul(s.substr(ppl+1,s.size()-ppl-1));
if(pmin!=-1)
return calcul(s.substr(0,pmin))-calcul(s.substr(pmin+1,s.size()-pmin-1));
if(pinm!=-1)
return calcul(s.substr(0,pinm))*calcul(s.substr(pinm+1,s.size()-pinm-1));
if(pdiv!=-1)
return calcul(s.substr(0,pdiv))/calcul(s.substr(pdiv+1,s.size()-pdiv-1));
return nr;
}
int main()
{
string s;
cin>>s;
cout<<calcul(s);
return 0;
}