Pagini recente » Cod sursa (job #1090472) | Cod sursa (job #2929767) | Cod sursa (job #960939) | Cod sursa (job #854995) | Cod sursa (job #1692994)
#include <bits/stdc++.h>
const int DIM = 1 << 17;
using namespace std;
char S[DIM]; int N, i;
int solve_expression( int &i );
int solve_term( int &i );
int solve_factor( int &i );
int solve_number( int &i );
int solve_expression( int &i ) {
int result = solve_term( i );
while( S[i] == '+' || S[i] == '-' ) {
switch( S[i] ) {
case '+': { i ++; result += solve_term( i ); break; }
case '-': { i ++; result -= solve_term( i ); break; }
}
}
return result;
}
int solve_term( int &i ) {
int result = solve_factor( i );
while( S[i] == '*' || S[i] == '/' ) {
switch( S[i] ) {
case '*': { i ++; result *= solve_factor( i ); break; }
case '/': { i ++; result /= solve_factor( i ); break; }
}
}
return result;
}
int solve_factor( int &i ) {
int result;
if( S[i] == '(' ) {
i ++;
result = solve_expression( i );
i ++;
} else
result = solve_number( i );
return result;
}
int solve_number( int &i ) {
int result = 0;
while( S[i] >= '0' && S[i] <= '9' ) {
result = result * 10 + ( S[i] - '0' );
i ++;
}
return result;
}
int main() {
ifstream input_file ( "evaluare.in" );
ofstream output_file( "evaluare.out" );
input_file >> S + 1;
N = strlen( S + 1 );
i = 1;
output_file << solve_expression( i );
return 0;
}