Pagini recente » Cod sursa (job #1724292) | Cod sursa (job #2943825) | Cod sursa (job #1026713) | Cod sursa (job #1719580) | Cod sursa (job #1605508)
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
#define MAX 100010
char myString[MAX], *pos = myString;
long termen ();
long factor ();
long evaluate ()
{
long r = termen();
while (*pos == '+' || *pos == '-')
switch (*pos)
{
case '+':
++pos;
r += termen();
break;
case '-':
++pos;
r -= termen();
break;
}
return r;
}
long termen()
{
long r = factor();
while (*pos == '*' || *pos == '/')
{
switch(*pos)
{
case '*':
++pos;
r *= factor();
break;
case '/':
++pos;
r /= factor();
break;
}
}
return r;
}
long factor ()
{
long r = 0;
if (*pos == '(')
{
++pos;
r = evaluate();
++pos;
}
else
while (*pos >= '0' && *pos <= '9')
{
r = r*10 + (int) (*pos - '0');
++pos;
}
return r;
}
int main()
{
fin.getline(myString, MAX);
fout <<evaluate() <<'\n';
return 0;
}