runner% cat writebase.c #include #include void dumpout(int n, int base); void writebase(int n, int base); int readbase(int base); void main(void) { int n, base; for( ; ; ) { printf("input base (in base 10):"); base = readbase(10); if (base <= 0) break; printf("Input number (in base "); writebase(base, 10); printf("):"); n = readbase(base); dumpout(n, 10); dumpout(n, 8); dumpout(n, 2); } } void dumpout(int n, int base) { printf("Base "); writebase(base, 10); printf(": "); writebase(n, base); putchar('\n'); } void writebase(int n, int base) { if (n != 0) { writebase(n/base, base); putchar((n%base) + '0'); } } int readbase(int base) { char c; int i = 0; while (isdigit(c = getchar())) i = base*i + (c - '0'); return i; } runner% writebase input base (in base 10):10 Input number (in base 10):74 Base 10: 74 Base 8: 112 Base 2: 1001010 input base (in base 10):8 Input number (in base 8):112 Base 10: 74 Base 8: 112 Base 2: 1001010 input base (in base 10):2 Input number (in base 2):1001010 Base 10: 74 Base 8: 112 Base 2: 1001010 input base (in base 10):10 Input number (in base 10):93 Base 10: 93 Base 8: 135 Base 2: 1011101 input base (in base 10):10 Input number (in base 10):1000 Base 10: 1000 Base 8: 1750 Base 2: 1111101000 input base (in base 10):0 runner%