Pagini recente » Cod sursa (job #1637539) | Cod sursa (job #2847946) | Cod sursa (job #2528864) | Cod sursa (job #2201346) | Cod sursa (job #599566)
Cod sursa(job #599566)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char exp[100001];
void citire(){
ifstream in("evaluare.in");
in >> exp;
in.close();
}
long expresie(int k1, int k2);
long termen(int k1, int k2);
long factor(int k1, int k2){
if(exp[k1] == '('){
return expresie(k1+1, k2-1);
}else{
long t=0;
for(int i=k1;i<=k2;++i)
t=t*10+exp[i]-'0';
return t;
};
}
long termen(int k1, int k2){
long produs=1, x=k1;
char c='*';
for(int i=k1;i<=k2;++i){
if(exp[i] == '*' || exp[i] == '/' || exp[i] == '\0' || i==k2){
switch(c){
case '*': produs*=factor(x, i-1);
x=i+1;
break;
case '/': produs/=factor(x, i-1);
x=i+1;
break;
}
c=exp[i];
}
}
return produs;
}
long expresie(int k1, int k2){
long suma=0, x=k1;
char c='+';
for(int i=k1;i<=k2;++i){
if(exp[i] == '+' || exp[i] == '-' || exp[i] == '\0' || i == k2){
switch(c){
case '+': suma+=termen(x, i-1);
x=i+1;
break;
case '-': suma-=termen(x, i-1);
x=i+1;
break;
}
c=exp[i];
}
}
return suma;
}
int main()
{
citire();
cout << (expresie(0,strlen(exp)-1));
return 0;
}