Pagini recente » Cod sursa (job #2877808) | Cod sursa (job #192994) | Cod sursa (job #831396) | Cod sursa (job #3133963) | Cod sursa (job #2019782)
#include <bits/stdc++.h>
using namespace std;
int expresie();
int factor();
int termen();
bool is_digit();
int nr();
char v[100010];
int p;
int main()
{
v[0] = '(';
FILE *in = fopen("evaluare.in", "r"), *out = fopen("evaluare.out", "w");
fscanf(in, "%s", v + 1);
int n = strlen(v);
v[n] = ')';
fprintf(out, "%d", expresie());
return 0;
}
int factor()
{
int ans(expresie());
bool add;
while (v[p] == '*' || v[p] == '/') {
add = (v[p] == '*');
p++;
ans = (add ? ans * expresie() : ans / expresie());
}
return ans;
}
int termen()
{
int ans = 0;
bool add = 1;
if (v[p] == '+' || v[p] == '-')
add = (v[p] == '+'), p++;
ans = (add ? 1 : -1) * factor();
while (v[p] == '+' || v[p] == '-') {
add = (v[p] == '+');
p++;
ans += (add ? 1 : -1) * factor();
}
return ans;
}
int expresie()
{
if (is_digit())
return nr();
/// e o paranteza
p++;
int x = termen();
/// e o alta paranteza
p++;
return x;
}
bool is_digit()
{
return ('0' <= v[p] && v[p] <= '9');
}
int nr()
{
int ans(0);
while (is_digit()) {
ans = 10 * ans + v[p] - '0';
p++;
}
return ans;
}