Pagini recente » Cod sursa (job #168294) | Cod sursa (job #3281382) | Cod sursa (job #2042131) | Cod sursa (job #2901596) | Cod sursa (job #2969657)
#include <cstring>
#include <iostream>
using namespace std;
char s[256];
int e1=0,e2=0;
int numar(int st,int dr)
{
int nr=0;
for(int i=st;i<=dr;i++)
{
nr=nr*10+(s[i]-48);
}
return nr;
}
int semn(int st,int dr,char s1,char s2)
{
int cnt=0;
for(int i=dr;i>=st;i--)
{
if(s[i]==')') cnt++;
else if(s[i]=='(') cnt--;
if((s[i]==s1||s[i]==s2)&&cnt==0)
return i;
}
return -1;
}
int eval(int st,int dr)
{
int poz=semn(st,dr,'+','-');
if(poz!=-1)
{
int e1=eval(st,poz-1);
int e2=eval(poz+1,dr);
if(s[poz]=='+')
return e1+e2;
else
return e1-e2;
}
///___________________
poz=semn(st,dr,'*','/');
if(poz!=-1)
{
int e1=eval(st,poz-1);
int e2=eval(poz+1,dr);
if(s[poz]=='*')
return e1*e2;
else
return e1/e2;
}
if(s[st]=='('&&s[dr]==')')
return eval(st+1,dr-1);
return numar(st,dr);
}
int main()
{
cin.getline(s,255);
cout<<eval(0,strlen(s)-1);
return 0;
}