Pagini recente » Cod sursa (job #2567286) | Cod sursa (job #2390039) | Cod sursa (job #2571286) | Cod sursa (job #894023) | Cod sursa (job #2302937)
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
char s[100000];
int n;
int numar(int start, int fin)
{
int nr = 0;
for(int i = start; i<=fin; i++)
{
nr*=10;
nr+=s[i]-'0';
}
return nr;
}
bool plusMinus(int start, int fin, int &i, bool &semn)
{
int parant = 0;
for(i = fin; i>=start; i--)
{
if(s[i] == ')')
{
parant++;
}
else if(s[i] == '(')
{
parant--;
}
else if(parant == 0)
{
if(s[i] == '+')
{
semn = 0;
return true;
}
else if(s[i] == '-')
{
semn = 1;
return true;
}
}
}
i = start;
return false;
}
bool inmImp(int start, int fin, int &i, bool &semn)
{
int parant = 0;
for(i = fin; i>= start; i--)
{
if(s[i] == ')')
{
parant++;
}
else if(s[i] == '(')
{
parant--;
}
else if(parant == 0)
{
if(s[i] == '*')
{
semn = 0;
return true;
}
else if(s[i] == '/')
{
semn = 1;
return true;
}
}
}
i = start;
return false;
}
int divEtImp(int start, int fin)
{
int a, b;
int i = 0;
bool semn;
if(plusMinus(start, fin, i, semn))
{
if(semn == 0)
{
a = divEtImp(start, i-1);
b = divEtImp(i+1, fin);
return a+b;
}
else
{
a = divEtImp(start, i-1);
b = divEtImp(i+1, fin);
return a-b;
}
}
else if(inmImp(start, fin, i, semn))
{
if(semn == 0)
{
a = divEtImp(start, i-1);
b = divEtImp(i+1, fin);
return a*b;
}
else
{
a = divEtImp(start, i-1);
b = divEtImp(i+1, fin);
return a/b;
}
}
if(s[start] == '(' && s[fin] == ')')
return divEtImp(start+1, fin-1);
else
{
return numar(start, fin);
}
}
void rez()
{
scanf("%s", s);
n = strlen(s);
printf("%d", divEtImp(0, n-1));
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
rez();
return 0;
}