Pagini recente » Cod sursa (job #970806) | Cod sursa (job #554458) | Cod sursa (job #1578426) | Cod sursa (job #1240915) | Cod sursa (job #2567413)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
const int NMAX=100100;
char s[NMAX];
int n;
int evaluareExpresie(int&);
int gasireTermen(int&);
int gasireFactor(int&);
void citire()
{
fin.getline(s,NMAX);
n=strlen(s);
}
int evaluareExpresie(int &i)
{
int a=gasireTermen(i),b=NMAX;
while ((s[i]=='+' || s[i]=='-')&&b!=0){
switch(s[i]){
case '+':
i++;
b=gasireTermen(i);
a+=b;
break;
case '-':
i++;
b=gasireTermen(i);
a-=b;
break;
}
}
return a;
}
int gasireTermen(int &i)
{
int a=gasireFactor(i);
while ((s[i]=='*' || s[i]=='/')&&a!=0){
switch(s[i]){
case '*':
i++;
a*=gasireFactor(i);
break;
case '/':
i++;
a/=gasireFactor(i);
break;
}
}
return a;
}
int gasireFactor(int &i)
{
int a=0;
if (s[i]=='('){
i++;
a=evaluareExpresie(i);
i++;
}else{
while (s[i]>='0' && s[i]<='9' && i<n){
a=a*10+s[i]-'0';
i++;
}
}
return a;
}
int main()
{
int i=0;
citire();
fout<<evaluareExpresie(i)<<'\n';
}