Pagini recente » Cod sursa (job #2890623) | Cod sursa (job #1584706) | Cod sursa (job #1588198) | Cod sursa (job #1872070) | Cod sursa (job #2115597)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char a[100010];
int n;
int cautasemn1(int st, int dr)
{
int nr=0;
for (int i=dr; i>=st; i--)
{
if (nr==0 && (a[i]=='+' || a[i]=='-'))
return i;
if (a[i]==')')
nr++;
else
if (a[i]=='(')
nr--;
}
return -1;
}
int cautasemn2(int st, int dr)
{
int nr=0;
for (int i=dr; i>=st; i--)
{
if (nr==0 && (a[i]=='*' || a[i]=='/'))
return i;
if (a[i]==')')
nr++;
else
if (a[i]=='(')
nr--;
}
return -1;
}
long long numar(int st, int dr)
{
long long x=0;
for (int i=st; i<=dr; i++)
x=x*10+(a[i]-48);
return x;
}
long long expresie(int st, int dr)
{
int semn;
semn=cautasemn1(st, dr);
if (semn!=-1)
{
long long e1, e2;
e1=expresie(st, semn-1);
e2=expresie(semn+1, dr);
if (a[semn]=='+')
return e1+e2;
return e1-e2;
}
semn=cautasemn2(st, dr);
if (semn!=-1)
{
long long e1, e2;
e1=expresie(st, semn-1);
e2=expresie(semn+1, dr);
if (a[semn]=='*')
return e1*e2;
return e1/e2;
}
if (a[st]=='(' && a[dr]==')')
return expresie(st+1, dr-1);
return numar(st, dr);
}
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin.getline(a, 100010);
n=strlen(a);
fout << expresie(0, n-1);
return 0;
}