#include #include #include using namespace std; #define MAXP 32 #define MAXC 50 long long potenca[11][MAXP+1]; void from(int b, char num[]) { char *q; q = num; while (*q != '\0') q++; q--; long long fact = 1; long long res = 0; while (q >= num) { res += fact * (*q - '0'); fact *= (-b); q--; } printf("%lld\n", res); } int cifre[MAXC]; void to(long long b, long long num) { int i; long long sum; long long maxCifre = 0; // printf("baza: %d\n", b); for (i=0; i 0) { for (i=0; i<=MAXP; i++) { if (potenca[b][i] < 0) continue; // printf("sum: %lld\n", sum); // printf("pos can: %d\n", sum + potenca[b][i]*(b-1)); if (num <= sum + potenca[b][i]*(b-1)) { while (num > sum) { sum += potenca[b][i]; cifre[i]++; } // printf("sum: %d\n", sum); if (i > maxCifre) maxCifre = i; num = num - potenca[b][i]*cifre[i]; break; } else { // printf("%lld\n", sum); // printf("i: %d\n", i); sum += (potenca[b][i])*(b-1); // printf("povecal! %lld %lld %lld\n", sum, potenca[b][i], b-1); } // printf("new sum: %lld\n", sum); } if (i > MAXP) { // error // while (1); } } else if (num < 0) { for (i=0; i<=MAXP; i++) { if (potenca[b][i] > 0) continue; // printf("sum: %d\n", sum); if (num >= sum + potenca[b][i]*(b-1)) { while (num < sum) { sum += potenca[b][i]; cifre[i]++; } // printf("sum: %d\n", sum); if (i > maxCifre) maxCifre = i; num = num - potenca[b][i]*cifre[i]; break; } else { sum += potenca[b][i]*(b-1); } } if (i > MAXP) { // error // while (1); } } } for (i=maxCifre; i>=0; i--) { printf("%d", cifre[i]); } printf("\n"); } int main() { char line[1000]; char *p; // init int i, j; for (i=2; i<=10; i++) { potenca[i][0] = 1LL; for (j=1; j<=MAXP; j++) { potenca[i][j] = potenca[i][j-1] * (-i); } } /*for (i=2; i<=10; i++) { printf("potenca %d:\n", i); for (j=0; j<=MAXP; j++) { printf(" %lld", potenca[i][j]); } printf("\n"); }*/ int base; char numStr[100]; long long num; while (true) { fgets(line, 1000, stdin); p = line; if (*p == 'e') break; // odjebi if (*p == 'f') { // from p+=5; sscanf(p, "%d %s", &base, numStr); from(base, numStr); } else { // to p+=3; sscanf(p, "%d %lld", &base, &num); to(base, num); } } return 0; }