16

我正在尝试编写一个进行基本转换的 C++ 程序。

我想将十进制数转换为从 2 到 20 的所有其他整数基数。

是否有一种高效且易于实现的基本转换算法?

4

2 回答 2

35

我不明白问题到底出在哪里?进行基本转换非常简单直接:您可以像手动一样进行。

  • 数字除以基数
  • 写下余数
  • 用除法的整数部分重复该过程
  • 当你到达零时停止
  • 以相反顺序的余数为您提供基数

例子:

1025(十进制)以 15 为底:

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

以 15 为底的数字是 485

于 2012-10-03T17:53:55.823 回答
3

你可能有两个问题:

  • 从原始基数解析为计算机的本机整数表示(strtol在这方面非常擅长)。

  • 格式化到新的基地。(itoa很擅长这个)。

如果你想自己写,你可能会喜欢这个div函数。你输入数字和基数,它会从最右边的数字中分离出来。重复以获取所有数字。

如果你想更有效率,你可以除以基数的平方,一次得到两个数字(使用查找表来获取两个数字的 ASCII 字符)。 这是一些非常有效的实现的示例。 改变它以使用不同的基地并不困难。

于 2012-10-03T17:54:50.940 回答