Pagini recente » Cod sursa (job #949031) | Cod sursa (job #1629229) | Cod sursa (job #2360624) | Cod sursa (job #845137) | Cod sursa (job #2302853)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char a[100005];
int cautare(int l1, int l2, char s1, char s2)
{
int contor=0;
for(int i=l2; i>=l1; i--)
{
if(a[i]==')')
contor++;
if(a[i]=='(')
contor--;
if(contor==0 && (a[i]==s1 || a[i]==s2))
return i;
}
return -1;
}
int numar(int l1, int l2)
{
int n=0;
for(int i=l1; i<=l2; i++)
{
int c=a[i]-'0';
n=n*10+c;
}
return n;
}
int solve(int l1, int l2)
{
int rez=cautare(l1, l2, '+', '-');
if(rez!=-1)
{
int e1=solve(l1, rez-1);
int e2=solve(rez+1, l2);
if(a[rez]=='+')
return e1+e2;
return e1-e2;
}
rez=cautare(l1, l2, '*', '/');
if(rez!=-1)
{
int e1=solve(l1, rez-1);
int e2=solve(rez+1, l2);
if(a[rez]=='*')
return e1*e2;
return e1/e2;
}
if(a[l1]=='(' && a[l2]==')')
return solve(l1+1, l2-1);
return numar(l1, l2);
}
int main()
{
f.getline(a, 100005);
int l=strlen(a);
g<<solve(0, l-1);
return 0;
}