Pagini recente » Cod sursa (job #1634733) | Cod sursa (job #2561568) | Cod sursa (job #1042993) | Cod sursa (job #821848) | Cod sursa (job #1459635)
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char* c;
string s;
int cif,rs;
int adunare(int k);
int parti(int k);
int cifra();
int eval(int k){
switch(*c){
case '+': return adunare(k);
case '-': return adunare(k);
case '*': return parti(k);
case '/': return parti(k);
case '\0': return k;
case ')':{
c++;
return k;
}
default : return eval(cifra());
}
}
int el(){
switch(*c){
case '(':{
c++;
return eval(el());
}
default : return cifra();
}
}
int cifra(){
cif = 0;
for( ; int(*c)>=48 && int(*c) <= 57; c++){
cif*=10;
cif+=int(*c) - 48;
}
return cif;
}
int adunare(int k){
if(*c == '+'){
c++;
return k + eval(0);
}
else{
c++;
return k - eval(0);
}
}
int parti(int k){
if(*c == '*'){
c++;
return eval(k*el());
}
else{
c++;
return eval(k/el());
}
}
int main(){
getline(fin,s);
c = &s[0];
fout << eval(el());
return 0;
}