Pagini recente » Cod sursa (job #1576350) | Cod sursa (job #2586314) | Cod sursa (job #1434887) | Cod sursa (job #950989) | Cod sursa (job #2112504)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100002];
int numar(int st, int dr)
{
int nr=0;
for(int i=st; i<=dr; i++)
nr=nr*10+s[i]-48;
return nr;
}
int cautare(int st, int dr, char semn1, char semn2)
{
int nr=0;
for(int i=dr;i>=st;i--)
{
if(s[i]==')')
nr++;
if(s[i]=='(')
nr--;
if(nr==0 && (semn1==s[i] || semn2==s[i]))
return i;
}
return -1;
}
int rezolv(int st, int dr)
{
int p=cautare(st, dr, '+', '-');
if(p!=-1)
{
int x=rezolv(st, p-1);
int y=rezolv(p+1, dr);
if(s[p]=='+')
return x+y;
return x-y;
}
p=cautare(st, dr, '*', '/');
if(p!=-1)
{
int x=rezolv(st, p-1);
int y=rezolv(p+1, dr);
if(s[p]=='*')
return x*y;
return x/y;
}
if(s[st]=='(' && s[dr]==')')
return rezolv(st+1, dr-1);
return numar(st, dr);
}
int main()
{
f.getline(s, 100002);
int n=strlen(s);
g<<rezolv(0, n-1);
return 0;
}