Pagini recente » Cod sursa (job #533871) | Cod sursa (job #2984585) | Cod sursa (job #1310033) | Cod sursa (job #99482) | Cod sursa (job #2109936)
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
char s[100001];
long long n,nr;
long long bai(long long st,long long dr)
{
long long semn=-1;
char x;
for(long long i=dr;i>=st;--i)
if((s[i]=='+'||s[i]=='-')&&nr==0)
{
semn=i;
x=s[i];
break;
}
else
if(s[i]==')')
nr++;
else
if(s[i]=='(')
nr--;
if(semn!=-1)
{
if(x=='-')
return bai(st,semn-1)-bai(semn+1,dr);
else
return bai(st,semn-1)+bai(semn+1,dr);
}
semn=-1;
nr=0;
for(long long i=dr;i>=st;--i)
if((s[i]=='*'||s[i]=='/')&&nr==0)
{
semn=i;
x=s[i];
break;
}
else
if(s[i]==')') nr++;
else
if(s[i]=='(') nr--;
if(semn!=-1)
{
if(x=='/')
return bai(st,semn-1)/bai(semn+1,dr);
else
return bai(st,semn-1)*bai(semn+1,dr);
}
if(s[st]=='('&&s[dr]==')')
return bai(st+1,dr-1);
long long numar=0;
for(long long i=st;i<=dr;++i)
{
long long cifra=s[i]-'0';
numar=numar*10+cifra;
}
return numar;
}
int main()
{
ifstream fin("evaluare.in");
fin>>s;
n=strlen(s);
ofstream fout("evaluare.out");
fout<<bai(0,n-1);
return 0;
}