Pagini recente » Profil Marius314 | Cod sursa (job #2065133) | Cod sursa (job #2065153) | Cod sursa (job #3299110) | Cod sursa (job #2065138)
#include <fstream>
#include <string>
using namespace std;
int expresie (const string&, int&);
int termen (const string& , int&);
int factor (const string&, int&);
int expresie(const string& s, int& index)
{
int ans = termen(s, index);
int len = s.size();
while(index < len && (s[index] == '+' || s[index] == '-'))
{
++index;
if(s[index - 1] == '+')
{
ans += termen(s, index);
}
else
{
ans += termen(s, index);
}
}
return ans;
}
int termen(const string& s, int& index)
{
int len = s.size();
int ans;
ans = factor(s, index);
while(index < len && (s[index] == '*' || s[index] == '/'))
{
++index;
if(s[index - 1] == '*')
{
ans *= factor(s, index);
}
else
{
ans /= factor(s, index);
}
}
return ans;
}
int factor(const string& s, int& index)
{
int len = s.size();
int ans;
if(s[index] == '(')
{
++index;
ans = expresie (s, index);
++index;
}
else
{
ans = 0;
while(index < len && s[index] >= '0' && s[index] <= '9')
{
ans = 10 * ans + (s[index] - '0');
++index;
}
}
return ans;
}
int main()
{
ifstream in("evaluare.in");
ofstream out("evaluare.out");
string s;
in >> s;
int index = 0;
out<< expresie(s, index) << "\n";
in.close();
out.close();
}