Pagini recente » Cod sursa (job #1526846) | Cod sursa (job #770656) | Cod sursa (job #2142241) | Cod sursa (job #811918) | Cod sursa (job #3182128)
#include <fstream>
#include <string.h>
using namespace std;
char s[10000];
int cautas(int st, int dr, char s1, char s2)
{
int nr=0;
for(int i=dr; i>=st; i--)
{
if(s[i]=='(')
nr--;
if(s[i]==')')
nr++;
if(nr==0 && (s1==s[i] || s2==s[i]))
return i;
}
return -1;
}
int num(int st, int dr)
{
int numar=0;
for(int i=st; i<=dr; i++)
{
numar=numar*10+(s[i]-'0');
}
return numar;
}
int rezolv(int st, int dr)
{
int poz=cautas(st, dr, '+', '-');
if(poz!=-1)
{
int nr1=rezolv(st, poz-1);
int nr2=rezolv(poz+1, dr);
if(s[poz]=='+')
return nr1+nr2;
return nr1-nr2;
}
poz=cautas(st, dr, '*', '/');
if(poz!=-1)
{
int nr1=rezolv(st, poz-1);
int nr2=rezolv(poz+1, dr);
if(s[poz]=='*')
return nr1*nr2;
return nr1/nr2;
}
if(s[st]=='(' && s[dr]==')')
return rezolv(st+1, dr-1);
return num(st, dr);
}
int main()
{
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
cin.getline(s, 10000);
int n=strlen(s);
cout<<rezolv(0, n-1);
return 0;
}