#include #include #define MAX 1024 using namespace std; int mod(int a, int b) { //printf("%d %d %d %d\n",a,b,a%b,a%b+b); int r = a % b; if ( r < 0 ) return r + b; return r; } char buf[MAX]; stack stos; int main() { int number; int base = 0; char typ; while( gets(buf) ) { char * ptr = buf; if( buf[0] == 'e') return 0; if( buf[0] == 'f') { typ = 1; ptr+=4; int wynik = 0; sscanf(ptr, "%d %d", & base, & number); // printf("%d %d\n", base, number); int podst = 1; while( number != 0 ) { wynik+= (number % 10) * podst; number/=10; podst*=base; } printf("%d\n", wynik); } else { // number=-number; ptr += 2; sscanf(ptr, "%d %d", & base, & number); number=-number; // printf("%d %d\n", base, number); int numbit = 0; int bit = 0; while( number != 0 ) { if( number > 0 ) { if( numbit % 2) { bit = mod(number,abs(base)); number -= bit; number/=abs(base); } else { bit = mod( abs(base) - mod(number, abs(base)), abs(base)); // printf("BIT: %d %d %d\n", bit,number,abs(base)); number+=bit; number/=abs(base); } // printf("BIT: %d %d %d\n", bit,number,abs(base)); } else { if( numbit %2 ) { bit = mod(number, abs(base)); number-=bit; number/=abs(base); } else { bit = mod(abs(base) - mod(number, abs(base)), abs(base)); number+=bit; number/=abs(base); } } stos.push(bit); ++ numbit; } while( !stos.empty()) { printf("%d", stos.top()); stos.pop(); } printf("\n"); } } return 0; }