#include #include using namespace std; #define DECIMAL_TO_NEGA 1 #define NEGA_TO_DECIMAL 2 int solve(int tryb, int baza, char liczba[]) { if (tryb == NEGA_TO_DECIMAL) { long long toRet = 0; long long i = 1; for (int j = strlen(liczba); --j >= 0;) { toRet += i * (liczba[j] - '0'); i *= baza; } printf("%Ld\n",toRet); } else { int x, iter = 0;; char toRet[10000]; sscanf(liczba,"%d", &x); while (x) { int newX = x / baza; int r = x - newX * baza; if (r < 0) { r -= baza; ++newX; } x = newX; toRet[iter++] = '0' + r; } toRet[iter]= 0; for (int j = strlen(toRet); --j >= 0;) { printf("%c", toRet[j]); } printf("\n"); } return 0; } int main() { char linijka[105] = {0}; char chtryb[20] = {0}; int baza, tryb; char liczba[100]; while (1) { //pobieramy wiersz //fgets(linijka, 101, stdin); scanf("%[a-z]s", chtryb); //koniec wejscia, zakonczyc program if (chtryb[0] == 'e') { return 0; } scanf("%i%s", &baza, liczba); fgets(linijka, 101, stdin); //kolejne zadanie konwersji //sscanf(linijka, "%[a-z]s%[-]c%i %s", chtryb, &tmp, &baza, liczba); if (chtryb[0]=='t') { tryb = DECIMAL_TO_NEGA; } else { tryb = NEGA_TO_DECIMAL; } solve(tryb, baza, liczba); } return 0; }