Pagini recente » Cod sursa (job #2317740) | Cod sursa (job #2425476) | Monitorul de evaluare | Cod sursa (job #424964) | Cod sursa (job #757746)
Cod sursa(job #757746)
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
bool ew=false;
vector<int> n,c;
int find(char tr);
void oper();
int main(){
ifstream cinr ("evaluare.in");
ofstream cour ("evaluare.out");
string s;
getline(cinr,s);
c.push_back(0);
int k;
for(int i=0; i<s.size(); i++){
k=find(s[i]);
if(k!=0){
if(k==3){
while(c.back()!=-3){
oper();
}
c.pop_back();
}
else {
while(abs(k)<=abs(c.back())){
if(c.back()==-3)
{ break; }
oper();
}
c.push_back(k);
}
}
}
while(n.size()>1){ oper(); }
cour << n[0];
cinr.close();
cour.close();
return(0);
}
void oper(){
int x,y,qw,r;
qw=c.back(); c.pop_back();
y=n.back(); n.pop_back();
x=n.back(); n.pop_back();
switch(qw){
case -1: r=x-y; break;
case 1: r=x+y; break;
case -2: r=x/y; break;
case 2: r=x*y; break;
}
n.push_back(r);
}
int find(char tr){
int u=int(tr);
if(u>=48){
u-=48;
if(ew){ n[n.size()-1]=n[n.size()-1]*10+u; }
else { n.push_back(u); }
ew=true;
return(0);
}
ew=false;
if(u==40){ return(-3); }
if(u==41){ return(3); }
if(u==42){ return(2); }
if(u==43){ return(1); }
if(u==45){ return(-1); }
if(u==47){ return(-2); }
}