Pagini recente » Cod sursa (job #1072336) | Cod sursa (job #1509879) | Cod sursa (job #2549870) | Cod sursa (job #771763) | Cod sursa (job #2207067)
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
int evaluare(char a[],int st,int dr)
{
int depth=0;
for(int i=dr; i>=st; i--)
{
if(a[i]=='(')depth++;
if(a[i]==')')depth--;
if(depth==0)
{
if(a[i]=='+')
{
return evaluare(a,st,i-1)+ evaluare(a,i+1,dr);
}
if(a[i]=='-')
{
return evaluare(a,st,i-1)- evaluare(a,i+1,dr);
}
}
}
for(int i=dr; i>=st; i--)
{
if(a[i]=='(')depth++;
if(a[i]==')')depth--;
if(depth==0)
{
if(a[i]=='*')
{
return evaluare(a,st,i-1)*evaluare(a,i+1,dr);
}
if(a[i]=='/')
{
return evaluare(a,st,i-1)/evaluare(a,i+1,dr);
}
}
}
if(a[st] == '('&&a[dr]==')')
{
return evaluare(a,st+1,dr-1);
}
int rez=0;
for(int i=st; i<=dr; i++)
rez=rez*10+a[i]-'0';
return rez;
}
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char a[100000];
int n;
f.getline(a,100000);
n=strlen(a);
cout<<evaluare(a,0,n-1);
return 0;
}