Pagini recente » Cod sursa (job #2767623) | Cod sursa (job #2544454) | Cod sursa (job #689981) | Cod sursa (job #1080962) | Cod sursa (job #1852088)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char sir[100010], *p=sir;
long termen();
long factor();
long eval() {
long r = termen();
while ( *p=='+' || *p=='-' ) {
if(*p == '+') p++, r += termen();
else if(*p == '-') p++, r -= termen();
}
return r;
}
long termen() {
long r = factor();
while ( *p=='*' || *p=='/' ) {
if(*p == '*') p++, r *= factor();
else if(*p == '/') p++, r /= factor();
}
return r;
}
long factor() {
long r=0;
if ( *p == '(' ) {
p++;
r = eval();
p++;
} else {
while ( *p>='0' && *p<='9' ) {
r = r*10 + *p - '0';
p++;
}
}
return r;
}
int main() {
fin.getline(sir,100010);
fout<<eval();
return 0;
}
/*
* Functia factor() va returna valoarea unui singur factor, care poate fi o subexpresie
* sau un numar natural
*/
long factor() {
long r=0;
if ( *p == '(' ) { // avem o subexpresie
++p; // trecem peste '('
r = eval();
++p; // trecem peste ')'
} else {
while ( *p>='0' && *p<='9' ) { // avem un numar
r = r*10 + *p - '0';
++p;
}
}
return r;
}
int main() {
fgets(S, MAX, fopen("evaluare.in", "r"));
fprintf(fopen("evaluare.out", "w"), "%ld\n", eval());
return 0;
}