Base 10 to base n conversions

38,285

Solution 1

I don't understand where exactly is the problem? It's very easy and straigtforward to do base conversion: you do it as you would by hand.

  • divide the number by base
  • write down the remainder
  • repeat the process with the integer part of the division
  • stop when you reach zero
  • the remainders in reverse order give you the digits in base

Example:

1025 (decimal) to base 15:

1025 / 15 = 68 , remainder 5
68   / 15 =  4 , remainder 8
4    / 15 =  0 , remainder 4

The number in base 15 is 485

Solution 2

You may have two problems:

  • Parsing from the original base to the computer's native integer representation (strtol is quite good at this).

  • Formatting into the new base. (itoa is quite good at this).

If you want to write it yourself, you might like the div function. You feed in the number and the base, and it splits off the rightmost digit. Repeat to get all digits.

If you want to be more efficient, you can divide by the base squared, and get two digits at a time (use a lookup table to get the ASCII characters for both digits). Here's an example of some very efficient implementations. Changing it to use a different base would not be difficult.

Share:
38,285
Rontogiannis Aristofanis
Author by

Rontogiannis Aristofanis

Updated on July 22, 2022

Comments

  • Rontogiannis Aristofanis
    Rontogiannis Aristofanis almost 2 years

    I'm trying to write a C++ program that does base-conversions.

    I want to convert a decimal number to all the other integer bases from 2 to 20.

    Is there an efficient and easy-to-implement algorithm for base conversions?