Pagini recente » Cod sursa (job #2635297) | Cod sursa (job #2698441) | Cod sursa (job #2408420) | Cod sursa (job #264391) | Cod sursa (job #2529785)
#include <fstream>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int calcul(string s)
{
int i=0,p=0,ok=0;
if(s[0]!='(')
ok=1;
while(i<s.size())
{
if(p==0 and ok==1)
break;
if(s[i]=='(')
++p,ok=1;
else if(s[i]==')')
--p,ok=1;
++i;
}
if(i==s.size())
return calcul(s.substr(1,s.size()-2));
int ppl=-1,pmin=-1,pinm=-1,pdiv=-1,nr=0;
i=0;
p=0;
while(i<s.size())
{
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(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;
}