Pagini recente » Cod sursa (job #649400) | Borderou de evaluare (job #1036363) | Cod sursa (job #955991) | Cod sursa (job #410109) | Cod sursa (job #1226239)
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
string s;
int i, x, y;
long n;
stack <char> S;
stack <int> R;
void sign(){
x = R.top();
R.pop();
y = R.top();
R.pop();
}
int main() {
getline(in, s);
n = s.size();
s[n] = ' ';
for (i = 0; i <= n; i++) {
if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '(')
S.push(s[i]);
else if (s[i] >= '0' && s[i] <= '9') {
x = 0;
while (s[i] >= '0' && s[i] <= '9') {
x = x * 10 + int(s[i]) - 48;
if (s[i+1] >= '0' && s[i+1] <= '9') i++;
else break;
}
R.push(x);
if (!S.empty()) {
if (S.top() == '*')
sign(),
R.push(x * y),
S.pop();
else if (S.top() == '/')
sign(),
R.push(y / x),
S.pop();
}
} else {
while (1) {
if (S.empty())
break;
if (S.top() == '(') {
S.pop();
break;
}
sign();
if (S.top() == '*')
R.push(x*y);
else if (S.top() == '/')
R.push(y / x);
else if (S.top() == '+')
R.push(x + y);
else if (S.top() == '-')
R.push(y - x);
S.pop();
}
}
}
out << R.top() << "\n";
return 0;
}