Pagini recente » Borderou de evaluare (job #1900462) | Cod sursa (job #702782) | Cod sursa (job #3234349) | Cod sursa (job #389373) | Cod sursa (job #1142286)
#include <fstream>
#define NMax 100010
using namespace std;
char S[NMax], *p;
long termen();
long factor();
long eval()
{
long ret;
ret = termen();
while((*p == '+') || (*p == '-'))
switch(*p)
{
case '+':
++p;
ret += termen();
break;
case '-':
++p;
ret -= termen();
break;
}
return ret;
}
long termen()
{
long ret;
ret = factor();
while((*p == '*') || (*p == '/'))
{
switch(*p)
{
case '*':
++p;
ret *= factor();
break;
case '/':
++p;
ret /= factor();
break;
}
}
return ret;
}
long factor()
{
long ret;
ret = 0;
if(*p == '(')
{
++p;
ret = eval();
++p;
}
else
{
while((*p >= '0') && (*p <= '9'))
{
ret = ret * 10 + (int)(*p - '0');
++p;
}
}
return ret;
}
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin.get(S,NMax);
p = S;
fout << eval();
fin.close();
fout.close();
return 0;
}