Pagini recente » Cod sursa (job #2459269) | Cod sursa (job #45182) | Cod sursa (job #3166050) | Cod sursa (job #2547178) | Cod sursa (job #3127096)
/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <fstream>
#include <vector>
#include <cstring>
#include <stack>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
stack<char>semne;
stack<char>numere;
char s[100005];
int calc(int first, int second, int op) {
if(op == '-')
return second-first;
if(op == '*')
return second*first;
if(op == '+')
return second+first;
if(op == '/')
return second/first;
}
int grad(char t) {
if(t == '/' || t == '*')
return 2;
if(t == '+' || t=='-' )
return 1;
return 0;
}
int evaluate() {
int length = strlen(s+1);
for(int i = 1; i <= length; ++i) {
if(s[i] == ' ')
continue;
if(s[i]=='(')
semne.push('(');
if(s[i]>='0' && s[i] <= '9')
{
int number = 0;
while(s[i]>='0' && s[i] <= '9' && i <= length){
number = number*10 + s[i]-'0';
++i;
}
numere.push(number);
}
if(grad(s[i])){
while(semne.size() != 0 && grad(semne.top()) >= grad(s[i])) {
int first = numere.top();
numere.pop();
int second = numere.top();
numere.pop();
int rez = calc(first, second,semne.top());
numere.push(rez);
semne.pop();
}
semne.push(s[i]);
}
if(s[i]==')'){
while(semne.size() != 0 && semne.top()!='(') {
int first = numere.top();
numere.pop();
int second = numere.top();
numere.pop();
int rez = calc(first, second,semne.top());
numere.push(rez);
semne.pop();
}
semne.pop();
}
}
while(semne.size() > 0) {
int first = numere.top();
numere.pop();
int second = numere.top();
numere.pop();
int rez = calc(first, second,semne.top());
numere.push(rez);
semne.pop();
}
return numere.top();
return 0;
}
int main(){
fin >> (s+1);
fout<<evaluate();
}