Pagini recente » Cod sursa (job #2457245) | Cod sursa (job #1497913) | Cod sursa (job #1248166) | Cod sursa (job #576516) | Cod sursa (job #3140138)
#include <iostream>
#include <fstream>
using namespace std;
typedef long long ll;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
int pos;
string sir;
short s[256];
ll factor(), termen();
ll evaluare(){
ll r=termen();
while (s[sir[pos]]==1){
pos++;
if (sir[pos-1]=='+')
r+=termen();
else r-=termen();
}
return r;
}
ll termen(){
ll r=factor();
while (s[sir[pos]]==2){
pos++;
if (sir[pos-1]=='*')
r*=factor();
else r/=factor();
}
return r;
}
ll factor(){
ll r=0;
if (sir[pos]=='('){
pos++;
r=evaluare();
pos++;
}
else while (s[sir[pos]]==3){
r=r*10+sir[pos]-'0';
pos++;
}
return r;
}
int main()
{
s['+']=s['-']=1;
s['*']=s['/']=2;
for (int i='0'; i<='9'; i++)
s[i]=3;
fin>>sir;
sir+='$';
fout<<evaluare();
return 0;
}