Pagini recente » Cod sursa (job #1851503) | Clasament ag | Cod sursa (job #2885812) | Cod sursa (job #2058985) | Cod sursa (job #1859699)
#include<cstdio>
#include<cstring>
#include <algorithm>
#define hmax 2
using namespace std;
char s [ 107 ] ;
char *p = s ;
char operand [ 4 ] [ 4 ] = { "+-" , "*/^" , "" , "" } ;
long long eval ( long long ) ;
long long semn ( long long x , long long y , char tip)
{
if ( tip == '+' )
return x + y ;
if ( tip == '^') {
int p = 1;
for(int i = 1; i <= y; ++i) {
p *= x;
}
return p;
}
if ( tip == '/' )
return x / y ;
return 0;
}
long long element ( )
{
long long r = 0 ;
if ( * p == '(' )
{
++ p ;
r = eval ( 0 ) ;
++ p ;
}
else
while ( strchr("0123456789", * p ) )
r = r * 10 + *( ++ p - 1 ) - '0';
return r;
}
long long eval ( long long h )
{
long long r = ( h == hmax ) ? element ( ) : eval ( h + 1 ) ;
while ( strchr ( operand [ h ] , * p ) )
r = semn ( r , eval ( h + 1 ) , * ( ++ p - 1 )) ;
return r ;
}
int main()
{
freopen ( "evaluare1.out" , "w" , stdout ) ;
fgets(s, 107, fopen("evaluare1.in", "r"));
int n = strlen(s);
for(int i = 0; i < n; ++i) {
if(s[i] == '!') {
int nr = 0, pz = 0;
while(s[i] == '!') {
s[i] = '0';
++nr;
++i;
}
int b[10];
pz = i;
b[0] = 0;
while(s[i] >= '0' && s[i] <= '9') {
b[++b[0]] = s[i];
++i;
}
while(b[b[0]] == '0') {
--b[0];
}
int st = 0;
while(b[st] == '0') {
++st;
}
if(nr % 2 == 1) {
reverse(b + 1, b + b[0] + 1);
}
for(int l = pz; l <= pz + b[0] - 1; ++l) {
s[l] = b[l - pz + 1];
}
for(int l = pz + b[0]; l < i; ++l) {
for(int j = l; j < n; ++j) {
s[j] = s[j + 1];
}
s[n] = '0';
--i;
--n;
}
}
}
printf ( "%lld" , eval ( 0 ) ) ;
return 0;
}