Pagini recente » Cod sursa (job #3236960) | Cod sursa (job #2125384) | Cod sursa (job #1026812) | Cod sursa (job #725310) | Cod sursa (job #3199264)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("evaluare.in");
ofstream out ("evaluare.out");
int expresie(string & s,int & cnt);
int termen(string &s, int &cnt);
int factor(string& s,int& cnt);
int numar(string &s, int &cnt);
int expresie(string & s,int & cnt)
{
int semn;
int res=termen(s,cnt);
while(cnt<(int)s.size() && (s[cnt]=='+' || s[cnt]=='-'))
{
if(s[cnt]=='-')
semn=-1;
else
semn=1;
cnt++;
res+=semn*termen(s,cnt);
}
return res;
}
int termen(string & s, int & cnt)
{
int res=factor(s,cnt);
while(cnt<(int)s.size() && (s[cnt]=='*' || s[cnt]=='/'))
{
cnt++;
if(s[cnt-1]=='*')
{
res*=factor(s,cnt);
}
else
{
res/=factor(s,cnt);
}
}
return res;
}
int factor(string & s,int & cnt)
{
int res;
if(s[cnt]=='(')
{
cnt++;
res=expresie(s,cnt);
cnt++;
return res;
}
else
return numar(s,cnt);
}
int numar(string & s, int & cnt)
{
int res=0;
while(s[cnt]>='0' && s[cnt]<='9')
{
res*=10;
res+=s[cnt]-'0';
cnt++;
}
return res;
}
//5+7+(3+4)*7
int main()
{
int cnt=0;
string s;
in>>s;
out<<expresie(s,cnt);
return 0;
}