Pagini recente » Cod sursa (job #3040309) | Cod sursa (job #2838795) | Cod sursa (job #2513801) | Cod sursa (job #2705137) | Cod sursa (job #546351)
Cod sursa(job #546351)
#include <cstdio>
#include <string.h>
#define MaxN 100010
char S[MaxN];
long long i;
void cit()
{
scanf("%s",&S);
}
long long termen();
long long factor();
//aduna toti termenii unei expresii sau subexpresii
long long eval()
{
long long r=termen();
while(S[i]=='+'||S[i]=='-')
{
if(S[i]=='+')
{
i++;
r+=termen();
}
else
if(S[i]=='-')
{
i++;
r-=termen();
}
}
return r;
}
//efectueaza inmultirile si impartirile
long long termen()
{
long long r=factor();
while(S[i]=='*'||S[i]=='/')
{
if(S[i]=='*')
{
i++;
r*=factor();
}
else
if(S[i]=='/')
{
i++;
r/=factor();
}
}
return r;
}
//returneaza un factor
long long factor()
{
long long r=0;
if(S[i]=='(')
{
i++;// se sare peste '('
r=eval();
i++;//se sare peste ')'
}
else
while(S[i]>='0'&&S[i]<='9')
{
r=r*10 +(S[i]-'0');
i++;
}
return r;
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
cit();
i=0;
printf("%lld\n",eval());
fclose(stdin);
fclose(stdout);
return 0;
}