Pagini recente » Cod sursa (job #244118) | Cod sursa (job #2527935) | Cod sursa (job #635863) | Cod sursa (job #2755607) | Cod sursa (job #1267309)
#include <cstdio>
#include <cstring>
using namespace std;
char p[100000];
int nr,i;
int eval();
bool is(char x)
{
if(x<'0') return 0;
if(x>'9') return 0;
return 1;
}
int termen()
{
int f=0;
int fact;
if(p[i]=='(')
{
i++;
fact=eval();
}
else
while(is(p[i]))
{
{
f=f*10+p[i]-'0';
i++;
}
fact=f;
}
while(p[i]=='*' || p[i]=='/')
{
if(p[i]=='*')
{
i++;
f=0;
if(p[i]=='(')
{
i++;
fact*=eval();
continue;
}
while(is(p[i]))
{
f=f*10+p[i]-'0';
i++;
}
fact*=f;
}
else
{
i++;
f=0;
if(p[i]=='(')
{
i++;
fact/=eval();
continue;
}
while(is(p[i]))
{
f=f*10+p[i]-'0';
i++;
}
fact/=f;
}
}
return fact;
}
int eval()
{
int nr=0;
while(p[i]=='(') i++;
nr=termen();
while(p[i]=='+' || p[i]=='-' )
{
if(p[i]=='+')
{
i++;
nr+=termen();
}
else if(p[i]=='-')
{
i++;
nr-=termen();
}
}
++i;
return nr;
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
i=0;
gets(p);
int n=strlen(p);
nr=0;bool semn=true;
int rasp=0;int z;
while(i<n)
{
z=termen();
if(semn==true) rasp+=z;
else rasp-=z;
if(p[i]=='+') semn=true;
else semn=false;
++i;
}
printf("%d\n",rasp);
return 0;
}