Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 59 si 58 | Cod sursa (job #1129843) | Cod sursa (job #205583) | Cod sursa (job #201649) | Cod sursa (job #1497990)
#include <iostream>
#include <fstream>
#include <string.h>
#define nmax 100000000
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
long i,lg;
char s[100009];
long expresie();
long evaluare()
{
long a=0;
while(s[i]<='9' && s[i]>='0' && i<lg)
{a=a*10+s[i]-'0';i++;}
return a;
}
long factor()
{long rez;
if(s[i]=='(')
{i++;
rez=expresie();
i++;return rez;
}
rez=evaluare();
return rez;
}
long termen()
{long rez=factor();
while(i<lg && (s[i]=='*' || s[i]=='/'))
if(s[i]=='*')
{i++;rez*=factor();}
else {i++;rez/=factor();}
return rez;
}
long expresie()
{long rez=termen();
while(i<lg && (s[i]=='+' || s[i]=='-'))
if(s[i]=='+')
{i++;rez+=termen();}
else {i++;rez-=termen();}
return rez;
}
int main()
{
fin>>s;
lg=strlen(s);
fout<<expresie();
}