Pagini recente » Cod sursa (job #1638741) | Cod sursa (job #301030) | Cod sursa (job #1577650) | Cod sursa (job #2796612) | Cod sursa (job #2292488)
#include <fstream>
#include <string>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
int PlusMinus(int &p);
int MultiplyDivide(int &p);
int BracketsConstant(int &p);
int ValueOf(int &p);
int PlusMinus(int &p)
{
int ans = MultiplyDivide(p);
while(p < s.size() && (s[p] == '+' || s[p] == '-'))
{
int sign = (s[p] == '+') ? 1 : -1;
p++;
ans += sign * MultiplyDivide(p);
}
return ans;
}
int MultiplyDivide(int &p)
{
int ans = BracketsConstant(p);
while(p < s.size() && (s[p] == '*' || s[p] == '/'))
{
char sign = s[p];
p++;
if(sign == '*')
ans = ans * BracketsConstant(p);
else
ans = ans / BracketsConstant(p);
}
return ans;
}
int BracketsConstant(int &p)
{
int ans;
if(s[p] == '(')
{
p++;
ans = PlusMinus(p);
p++; /// ')'
}
else
ans = ValueOf(p);
return ans;
}
int ValueOf(int &p)
{
int sign = 1;
if(s[p] == '-')
{
sign = -1;
p++;
}
int ans = 0;
while(p < s.size() && isdigit(s[p]))
{
ans = ans * 10 + s[p] - '0';
p++;
}
return sign * ans;
}
int main()
{
int p = 0;
fin >> s;
fout << PlusMinus(p);
return 0;
}