Pagini recente » Infoarena cauta sponsori | Cod sursa (job #120998) | Cod sursa (job #2449325) | Cod sursa (job #3274636) | Cod sursa (job #1139885)
#include <fstream>
#include <cstring>
using namespace std;
const int N = 100000, lvMax = 2;
const char lvOp[2][3] = {"+-", "*/"};
char s[N], *poz;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
int expresie(), factor(), termen();
inline bool cifra(char c){
return '0' <= c && c <= '9';
}
inline int getNumber(){
int ans = 0;
while ( cifra(*poz) ){
ans = ans * 10 + *poz - '0';
poz++;
}
return ans;
}
inline int eval(int a, int b, char op){
if ( op == '+' )
return a + b;
if ( op == '-' )
return a - b;
if ( op == '*' )
return a * b;
if ( op == '/' )
return a / b;
return -1;
}
int compute(int lv){
if (lv == lvMax){
if ( cifra(*poz) )
return getNumber();
poz++;
int ans = compute(0);
poz++;
return ans;
}
int ans = compute(lv + 1);
while (*poz && strchr(lvOp[lv], *poz) ){
poz++;
ans = eval( ans, compute(lv + 1), *(poz - 1) );
}
return ans;
}
int main(){
in >> s;
poz = s;
out << compute(0) << "\n";
return 0;
}