【问题标题】:C Fast base convert from decimal to ternaryC快速从十进制转换为三进制
【发布时间】:2011-04-29 15:12:23
【问题描述】:

有没有办法将十进制数改为三进制数? 我的意思是我不想使用模除法,我有非常大的十进制数,比如 128123832812381835828638486384863486.............1237127317237 等等。

也不想使用 bigints。

有什么方法吗?

【问题讨论】:

  • 三元是什么意思?三号基地?
  • 当你说“十进制”时,你的意思是你有一个人类可读的字符串表示形式吗?
  • 谷歌充斥着“基本转换算法”的搜索结果。这些链接有帮助吗?
  • 第一个谷歌搜索结果似乎是正确的:codeproject.com/KB/recipes/BaseConverter.aspx
  • 我觉得你最好使用模除法。

标签: c decimal ternary


【解决方案1】:

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

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

示例:

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

首先初始化输出“累加器”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"

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-01-27
  • 2018-11-18
  • 2018-10-14
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 2011-05-16
相关资源
最近更新 更多