Pagini recente » Cod sursa (job #1553260) | Cod sursa (job #1963352) | Cod sursa (job #2737844) | Cod sursa (job #1434614) | Cod sursa (job #2109992)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char a[100010], n;
int cautasemn(int st, int dr)
{
int nr=0, poz1=-1, poz2=-1;
for (int i=st; i<=dr; i++)
{
if ((a[i]=='-' || a[i]=='+') && nr==0)
{
poz1=i;
}
if ((a[i]=='*' || a[i]=='/') && nr==0)
{
poz2=i;
}
if (a[i]=='(')
nr++;
if (a[i]==')')
nr--;
}
if (poz1!=-1)
return poz1;
return poz2;
}
int valoare(char x)
{
return x-48;
}
long long num(int st, int dr)
{
long long numar=0;
for (int i=st; i<=dr; i++)
numar=numar*10+valoare(a[i]);
return numar;
}
long long ex(int st, int dr)
{
int semn=cautasemn(st, dr);
if (semn!=-1)
{
int e1=ex(st, semn-1), e2=ex(semn+1, dr);
if (a[semn]=='-')
return e1-e2;
if (a[semn]=='+')
return e1+e2;
if (a[semn]=='*')
return e1*e2;
return e1/e2;
}
if (a[st]=='(' && a[dr]==')')
return ex(st+1, dr-1);
return num(st, dr);
}
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin.getline(a, 100010);
n=strlen(a);
fout << ex(0, n-1);
return 0;
}