#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]; char buf2[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 %s", & base, buf2); int m = strlen(buf2) - 1; // printf("%d %d\n", base, number); int podst = 1; for(int i = m ; i >= 0; -- i) { wynik+= int(buf2[i]-'0')*podst; podst*=base; } printf("%d\n", wynik); } else { // number=-number; ptr += 2; sscanf(ptr, "%d %d", & base, & number); if( number == 0){ printf("0\n"); continue;} 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; }