Pagini recente » Cod sursa (job #2793089) | Cod sursa (job #268664) | Cod sursa (job #1718175) | Profil MihneaGhira | Cod sursa (job #1759095)
#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 (plus_minus(str, &i));
}
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
f.get(s, 100004);
f.close();
g << eval_expr(s);
g.close();
}