#include int getnum(int base) { char buf[256]; int ch, index, value, newdigit; if (fgets(buf,sizeof buf,stdin)) { value = 0; for (index = 0; (ch = buf[index]) != '\n' && ch != '\0'; ++index) { if (ch >= '0' && ch <= '9') { newdigit = ch - '0'; } else if (ch >= 'A' && ch <= 'Z') { newdigit = ch - 'A' + 10; } else if (ch >= 'a' && ch <= 'z') { newdigit = ch - 'a' + 10; } else { printf("Illegal character for base %d (%c)\n",base,ch); return -1; } if (newdigit >= base) { printf("Illegal digit for base %d (%c)\n",base,ch); return -1; } value *= base; value += newdigit; } return value; } else return -1; } void putnum(int value, int base) { int quotient, remainder; remainder = value % base; quotient = value / base; if (quotient > 0) putnum(quotient,base); if (remainder < 10) putchar('0' + remainder); else putchar('A' + remainder - 10); } int main(void) { int base, value; for (;;) { fputs("input base: ",stdout); base = getnum(10); if (base <= 1) return 0; fputs("value: ",stdout); value = getnum(base); if (value < 0) return 0; fputs("value in base 10: ",stdout); putnum(value,10); putchar('\n'); fputs("output base: ",stdout); base = getnum(10); if (base <= 1) return 0; fputs("value in that base: ",stdout); putnum(value,base); putchar('\n'); } }