问题
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?
回答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
回答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.
来源:https://stackoverflow.com/questions/12713999/base-10-to-base-n-conversions