Pagini recente » Cod sursa (job #637084) | Cod sursa (job #1941390) | Cod sursa (job #1544284) | Cod sursa (job #722868) | Cod sursa (job #2223291)
#include <iostream>
#include<string.h>
#include<fstream>
using namespace std;
char s[10000];
int plusminus(int stanga, int dreapta)
{
int nr=0;
for(int i=dreapta;i>=stanga;i--)
{
if((s[i]=='+'||s[i]=='-')&&nr==0)
return i;
if(s[i]==')')
nr++;
if(s[i]=='(')
nr--;
}
return -1;
}
int orislash(int stanga, int dreapta)
{
int nr=0;
for(int i=dreapta;i>=stanga;i--)
{
if(s[i]=='*'||s[i]=='/')
return i;
if(s[i]==')')
nr++;
if(s[i]=='(')
nr--;
}
return -1;
}
int numar(int stanga, int dreapta)
{
int nr=0;
for(int i=stanga;i<=dreapta;i++)
nr=nr*10+s[i]-'0';
return nr;
}
int eval(int st, int dr)
{
int p=plusminus(st,dr);
if(p!=-1)
{
if(s[p]=='+')
return eval(st,p-1)+eval(p+1,dr);
if(s[p]=='-')
return eval(st,p-1)-eval(p+1,dr);
}
else
{
p=orislash(st,dr);
if(p!=-1)
{
if(s[p]=='*')
return eval(st,p-1)*eval(p+1,dr);
if(s[p]=='/')
return eval(st,p-1)/eval(p+1,dr);
}
else
{
if(s[st]=='('&&s[dr]==')')
eval(st+1,dr-1);
else
return numar(st,dr);
}
}
}
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin.getline(s,100000);
fout<<eval(0,strlen(s)-1);
return 0;
}