Pagini recente » Cod sursa (job #873321) | Cod sursa (job #3190259) | Cod sursa (job #961565) | Cod sursa (job #1151389) | Cod sursa (job #2684843)
#include <cstdio>
#include <string>
#include <iostream>
#define NMax 100011
using namespace std;
char s[NMax];
char* p = s;
char peek()
{
return* p;
}
char get()
{
return *p++;
}
int termen()
{
int result = get() - '0';
while (peek() >= '0' && peek() <= '9')
{
result = result * 10 + (get() - '0');
}
return result;
}
int expression();
int factor()
{
if (peek() >= '0' && peek() <= '9')
return termen();
else if (peek() == '(')
{
get();
int result = expression();
get();
return result;
}
else if (peek() == '-')
{
get();
return -factor();
}
return 0;
}
int term()
{
int result = factor();
while (peek() == '*' || peek() == '/')
{
if (get() == '*')
result *= factor();
else
result /= factor();
}
return result;
}
int expression()
{
int result = term();
while (peek() == '+' || peek() == '-')
{
if (get() == '+')
result += term();
else
result -= term();
}
return result;
}
int main()
{
fgets(s, NMax, fopen("evaluare.in", " r"));
long int result = expression();
fprintf(fopen("evaluare.out", "w"), "%ld\n", result);
}