Pagini recente » Cod sursa (job #3235112) | Cod sursa (job #3192403) | Cod sursa (job #2322214)
#include <bits/stdc++.h>
using namespace std;
int n;
char s[100005];
int adunare_scadere(int & p);
int inmultire_impartire(int & p);
int paranteze(int & p);
int valoare(int & p);
int adunare_scadere(int & p)
{
int rez = inmultire_impartire(p);
while(p < n && (s[p] == '-' || s[p] == '+'))
{
char semn = s[p];
p++;
if(semn == '+')rez = rez + inmultire_impartire(p);
else rez = rez - inmultire_impartire(p);
}
return rez;
}
int inmultire_impartire(int & p)
{
int rez = paranteze(p);
while(p < n && (s[p] == '/' || s[p] == '*'))
{
char semn = s[p];
p++;
if(semn == '*')rez = rez * paranteze(p);
else rez = rez / paranteze(p);
}
return rez;
}
int paranteze(int & p)
{
int rez = 0;
if(s[p] == '(')
{
p++;
rez = adunare_scadere(p);
p++;
}
else rez = valoare(p);
return rez;
}
int valoare(int & p)
{
int semn, rez = 0;
if(s[p] == '-')semn = -1, p++;
else semn = 1;
while(p < n && (s[p] >= '0' && s[p] <= '9'))
{
int cif = s[p] - '0';
rez = rez * 10 + cif;
p++;
}
return semn * rez;
}
int p;
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
f.getline(s, sizeof(s));
n = strlen(s);
g << adunare_scadere(p);
return 0;
}