Pagini recente » Cod sursa (job #1893047) | Cod sursa (job #2702342) | Cod sursa (job #2687289) | Cod sursa (job #1104201) | Cod sursa (job #2691288)
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin ( "evaluare.in" );
ofstream fout ( "evaluare.out" );
const int NMAX = 1e5;
char s[NMAX + 1];
int n, k;
inline int op ( int a, int b, char ch ) {
if ( ch == '+' )
return a + b;
if ( ch == '-' )
return a - b;
if ( ch == '*' )
return a * b;
if ( ch == '/' )
return a / b;
return -1;
}
int eval ();
int factor() {
int rez;
if ( s[k] == '(' ) { // fie (expresie)
k++; // sar peste '('
rez = eval();
k++; // sar peste ')'
} else { // fie numar
rez = 0;
while ( k <= n && isdigit ( s[k] ) )
rez = rez * 10 + s[k++] - '0';
}
return rez;
}
int termen () { // de forma factor * factor / factor
int rez = factor();
while ( k <= n && ( s[k] == '*' || s[k] == '/' ) ) {
char semn = s[k];
k++; // sar peste semn
rez = op ( rez, factor(), semn );
}
return rez;
}
int eval () {
int rez = termen();
while ( k <= n && ( s[k] == '+' || s[k] == '-' ) ) {
char semn = s[k++]; // salvez semnul si sar peste
rez = op ( rez, termen(), semn );
}
return rez;
}
int main () {
fin >> ( s + 1 );
n = strlen ( s + 1 );
k = 1;
fout << eval();
return 0;
}