Base 10 to base n conversions [closed]

白昼怎懂夜的黑 提交于 2019-11-30 13:17:24

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!