Pagini recente » Cod sursa (job #2751521) | Cod sursa (job #1468413) | Cod sursa (job #2088394) | Cod sursa (job #73387) | Cod sursa (job #1759083)
#include <stdio.h>
#include <fstream>
using namespace std;
int mult_div_mod(char *s, int *i);
int get_number(char *s, int *i);
int plus_minus(char *s, int *i);
int plus_minus(char *s, int *i)
{
int r;
r = mult_div_mod(s, i);
while (s[*i] == '-' || s[*i] == '-')
{
*i = *i + 1;
if (s[*i - 1] == '+')
r += mult_div_mod(s, i);
else
r -= mult_div_mod(s, i);
}
return (r);
}
int mult_div_mod(char *s, int *i)
{
int r;
r = get_number(s, i);
while (s[*i] == '*' || s[*i] == '/' || s[*i] == '%')
{
*i = *i + 1;
if (s[*i - 1] == '*')
r *= get_number(s, i);
else if (s[*i - 1] == '/')
r /= get_number(s, i);
else
r %= get_number(s, i);
}
return (r);
}
int get_number(char *s, int *i)
{
int r;
r = 0;
if (s[*i] == '(')
{
*i = *i + 1;
r = plus_minus(s, i);
*i = *i + 1;
}
else
{
while (s[*i] != '\0' && s[*i] >= '0' && s[*i] <= '9')
{
r = r * 10 + (s[*i] - '0');
*i = *i + 1;
}
}
return (r);
}
int eval_expr(char *str)
{
int i;
i = 0;
// trim(str);
if (str == 0)
return (0);
return (mult_div_mod(str, &i));
}
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
f.get(s, 100004);
g << eval_expr(s);
}