Pagini recente » Cod sursa (job #3337559) | Cod sursa (job #3313108) | Cod sursa (job #1427211) | Cod sursa (job #3317755) | Cod sursa (job #3346620)
#include <bits/stdc++.h>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
string s;
stack<char> op;
stack<long long> num;
long long n;
bool calc(int i) {
if (s[i]==')') {
return true;
}
if (op.empty()) {
return false;
}
if (op.top()=='*' || op.top()=='/') {
return true;
}
return false;
}
void ex() {
while (!op.empty() && op.top()!='(') {
long long x = num.top();
num.pop();
if (op.top()=='+') {
num.top()+=x;
}
else if (op.top()=='-') {
num.top()-=x;
}
else if (op.top()=='*') {
num.top()*=x;
}
else if (op.top()=='/') {
num.top()/=x;
}
op.pop();
}
if (!op.empty())
op.pop();
}
void debug() {
stack<long long> a=num;
stack<char> b=op;
cout<<'\n'<<n<<'\n';
if (a.empty()) {
cout<<'0';
}
while (!a.empty()) {
cout<<a.top()<<' ';
a.pop();
}
cout<<'\n';
if (b.empty()) {
cout<<'0';
}
while (!b.empty()) {
cout<<b.top()<<' ';
b.pop();
}
cout<<'\n';
}
long long eval() {
bool nou=true;
for (int i=0;i<s.size();i++) {
if (!(s[i]-'0'>=0 && s[i]-'0'<=9)) {
if (nou==false) {
num.push(n);
n=0;
nou=true;
}
if (calc(i)==true) {
ex();
}
if (s[i]!=')')
op.push(s[i]);
}
else {
n=n*10+s[i]-'0';
nou=false;
}
debug();
}
if (nou==false)
num.push(n);
debug();
ex();
//debug();
return num.top();
}
int main(){
in>>s;
out<<eval();
return 0;
}