C Fast base从十进制转换为三进制

时间:2011-04-29 15:12:24

标签: c decimal ternary

有没有将十进制数改为三元的方法? 我的意思是我不想使用modulo和divide方法,我有非常大的十进制数,类似于128123832812381835828638486384863486 ............. 1237127317237等。

也不想使用bigints。

有什么方法吗?

1 个答案:

答案 0 :(得分:4)

您不必使用divide / modulo。相反,迭代输入数字,从低到高。对于每个数字位置,首先计算输出表示中的1000....000(它是前一次幂10的10倍)。然后将该结果乘以数字,并累积到输出表示中。

您将需要在输出表示中执行乘法和加法的例程。乘法例程可以根据加法例程来编写。

示例:

将246(base-10)转换为base-3。

首先初始化输出“accumulator”a = "0"

初始化“乘数”m = "1"

另请注意,输出表示中的10是"101"

第一个数字是6 ,即d = "20"

  • 乘以:t = d * m = "20" * "1" = "20"
  • 收集:a = a + t = "0" + "20" = "20"
  • 更新乘数:m = m * "101" = "1" * "101" = "101"

第二个数字为4 ,即d = "11"

  • 乘以:t = d * m = "11" * "101" = "1111"
  • 收集:a = a + t = "20" + "1111" = "1201"
  • 更新乘数:m = m * "101" = "101" * "101" = "10201"

第三位是2 ,即d = "2"

  • 乘以:t = d * m = "2" * "10201" = "21102"
  • 收集:a = a + t = "1201" + "21102" = "100010"

答案是"100010"