Pagini recente » Cod sursa (job #649099) | Cod sursa (job #3153361) | Cod sursa (job #1148754) | Cod sursa (job #2339210) | Cod sursa (job #2354248)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100001];
int cautare(int st, int dr, char s1, char s2)
{
int nrpar=0;
for(int i=dr; i>=st; i--)
{
if(s[i]=='(')
nrpar--;
if(s[i]==')')
nrpar++;
if(nrpar==0 && (s[i]==s1 || s[i]==s2))
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 rez(int st, int dr)
{
int poz=cautare(st, dr, '+', '-');
if(poz!=-1)
{
int e1=rez(st, poz-1);
int e2=rez(poz+1, dr);
if(s[poz]=='+')
return e1+e2;
return e1-e2;
}
poz=cautare(st, dr, '*', '/');
if(poz!=-1)
{
int e1=rez(st, poz-1);
int e2=rez(poz+1, dr);
if(s[poz]=='*')
return e1*e2;
return e1/e2;
}
if(s[st]=='(' && s[dr]==')')
return rez(st+1, dr-1);
return num(st, dr);
}
int main()
{
f.getline(s, 100001);
int n=strlen(s);
g<<rez(0, n-1);
return 0;
}