Pagini recente » Cod sursa (job #2726668) | Cod sursa (job #217973) | Cod sursa (job #98224) | Cod sursa (job #549709) | Cod sursa (job #1906287)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
const int N=100009;
char s[N],op[4][4]={"+-","*/","^",""};
int loc;
bool cif(char x){
return(x>='0'&&x<='9');
}
int eval(int a,int b,char x){
switch(x){
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
}
}
int expr(int lev){
int x,y;
if(lev==2)
if(s[loc]=='('){
loc++;
x=expr(0);
loc++;
}
else
for(x=0;cif(s[loc]);loc++)
x=x*10+s[loc]-'0';
else
for(x=expr(lev+1);strchr(op[lev],s[loc]);x=y)
y=eval(x,expr(lev+1),s[loc++]);
return x;
}
int main()
{
int l;
in.getline(s,N,'\n');
in.close();
l=strlen(s);
s[l]='\n';
out<<expr(0)<<"\n";
out.close();
return 0;
}