【问题标题】:Base 10 to base n conversions [closed]以 10 为基数到 n 基数的转换[关闭]
【发布时间】:2012-09-24 16:56:43
【问题描述】:

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

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

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

【问题讨论】:

  • 只有一种方法可以将数字从一个基数转换为另一个基数。究竟是什么问题?
  • 当你说“2 到 20 的所有其他基数”时,我会假设你的意思是 2 到 20 的所有实数基数?没有虚数基数,也没有非整数基数?那些更难。
  • 另外,有什么问题吗?向我们展示您目前拥有的代码。
  • @MooingDuck 是的,你可以假设
  • 您是否打算使用字符串,因为您想对任意大小的数字进行转换?

标签: c++ algorithm base-conversion


【解决方案1】:

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

  • 数字除以基数
  • 写下剩余部分
  • 用除法的整数部分重复该过程
  • 到零时停止
  • 倒序的余数为您提供 base 中的数字

例子:

1025(十进制)以 15 为底:

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

以 15 为底的数字是 485

【讨论】:

    【解决方案2】:

    你可能有两个问题:

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

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

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

    如果你想提高效率,你可以除以基数的平方,一次得到两个数字(使用查找表来获取两个数字的 ASCII 字符)。 Here's an example of some very efficient implementations. 将其更改为使用不同的基础并不难。

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多