Pagini recente » Cod sursa (job #756415) | Cod sursa (job #1780340) | Cod sursa (job #3181215) | onis-2014/clasament | Cod sursa (job #2336725)
#include <cstdio>
#include <cstring>
#include <math.h>
using namespace std;
char s[100005];
int put(int n, int p)
{
int rez=1;
while(p)
{
if(p%2==1)
{
p--;
rez=rez*n;
}
p/=2;
n=n*n;
}
return rez;
}
int num();
int mult();
int ma();
int putere();
int i=0;
int solve()
{
int t=mult();
while(s[i]=='+'||s[i]=='-')
{
if(s[i]=='+')
{
i++;
t+=mult();
}
else
{
i++;
t-=mult();
}
}
return t;
}
int mult()
{
int t=ma();
while(s[i]=='*'||s[i]=='/')
{
if(s[i]=='*')
{
i++;
t*=ma();
}
else
{
i++;
t/=ma();
}
}
return t;
}
int ma()
{
int t=putere();
int nr=1;
while(s[i]=='$')
{
i++;
nr++;
t+=putere();
}
return t/nr;
}
int putere()
{
int t=0;
if(s[i]=='!')
{
i++;
t=sqrt(num());
}
else
{
t=num();
while(s[i]=='^')
{
if(s[i]=='^')
{
i++;
t=put(t,num());
}
}
}
return t;
}
int num()
{
int t=0;
if(s[i]=='(')
{
i++;
t=solve();
i++;
}
else
{
while(s[i]>='0' && s[i]<='9')
{
t=t*10+s[i]-'0';
i++;
}
}
return t;
}
/**
!- radical
^- putere
$- media aritmetica
adunare/scadere
produs/cat
mdediaaritmetica
putere/radical
num
*/
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%s",s);
printf("%d",solve());
return 0;
}