Pagini recente » Cod sursa (job #1363974) | Cod sursa (job #1052379) | Cod sursa (job #2455271) | Cod sursa (job #264767) | Cod sursa (job #1354545)
#include <fstream>
#include <cstring>
#include <cctype>
using namespace std;
int eval();
int termen();
int factor();
char sir[100005];
int pos, n;
int eval() {
int x = termen();
while (pos <= n)
if (sir[pos] == '+') {
pos++;
x += termen();
}
else if (sir[pos] == '-') {
pos++;
x -= termen();
}
else
break;
return x;
}
int termen() {
int x = factor();
while (pos <= n)
if(sir[pos] == '*') {
pos++;
x *= factor();
}
else if(sir[pos] == '/'){
pos++;
x /= factor();
}
else
break;
return x;
}
int factor() {
if (sir[pos] == '(') {
pos++;
int x = eval();
pos++;
return x;
}
int x = 0;
while (pos <= n && isdigit(sir[pos])) {
x *= 10;
x += (sir[pos] - '0');
pos++;
}
return x;
}
int main()
{
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
cin.get(sir + 1, 100005);
n = strlen(sir + 1);
pos = 1;
cout << eval() << '\n';
cin.close();
cout.close();
return 0;
}