Pagini recente » Cod sursa (job #3274625) | Cod sursa (job #3235579) | Cod sursa (job #2714119) | Cod sursa (job #3253837) | Cod sursa (job #3211970)
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
const int nmax = 100010;
string s;int i,N;
int numar(int &i);
int termen(int &i);
int adunare(int &i);
int product(int &i);
int numar(int &i){
long int n = 0;
while( i < N && s[i] >= '0' && s[i] <= '9'){
n = n*10+(s[i]-'0');
i++;
};
return n;
};
int termen(int &i){
if(s[i] == '('){
i++;
int n = adunare(i);
i++;
return n;
};
return numar(i);
};
int product(int &i){
int n = termen(i);
while(i < N && (s[i] == '*' || s[i] == '/')){
char operator_ = s[i];
i++;
int x = termen(i);
if(operator_ == '*'){
n *= x;
}else{
n /= x;
}
};
return n;
}
int adunare(int &i){
int n = product(i);
while(i < N && (s[i] == '+' || s[i] == '-')){
char operator_ = s[i];
i++;
int x = product(i);
if(operator_ == '+'){
n += x;
}else{
n -= x;
}
};
return n;
}
int main()
{
fin >> s;
i = 0;N = s.length();
fout << adunare(i);
return 0;
}