Pagini recente » Cod sursa (job #1866825) | Istoria paginii runda/iiot_simulare | Cod sursa (job #2898302) | Cod sursa (job #368189) | Cod sursa (job #3182137)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char s[100005];
int cautas(int st, int dr, char s1, char s2)
{
int nr=0;
for(int i=dr;i>=st;i--)
{
if(s[i]==')')
nr++;
if(s[i]=='(')
nr--;
if(nr==0 && (s[i]==s1 || s[i]==s2))
return i;
}
return -1;
}
int numar(int st, int dr)
{
int nr=0;
for(int i=st;i<=dr;i++)
nr=nr*10+(s[i]-'0');
return nr;
}
int solve(int st, int dr)
{
int poz=cautas(st,dr,'+','-');
if(poz!=-1)
{
int e1,e2;
e1=solve(st,poz-1);
e2=solve(poz+1,dr);
if(s[poz]=='+')
return e1+e2;
return e1-e2;
}
poz=cautas(st,dr,'*','/');
if(poz!=-1)
{
int e1,e2;
e1=solve(st,poz-1);
e2=solve(poz+1,dr);
if(s[poz]=='*')
return e1*e2;
return e1/e2;
}
if(s[st]=='(' && s[dr]==')')
return solve(st+1,dr-1);
return numar(st,dr);
}
int main()
{
int st,dr,n;
char s1,s2;
in.getline(s,100005);
n=strlen(s);
out<<solve(0,n-1);
return 0;
}