从不同的基数转换后查找位数的方法

Posted

技术标签:

【中文标题】从不同的基数转换后查找位数的方法【英文标题】:Method to find number of digits after converting from a different base number 【发布时间】:2014-10-26 23:59:27 【问题描述】:

引号中的文字提供了我的程序的一些背景知识,以防需要理解我的问题,如果您不想阅读,您可能能够完全理解末尾未引用的内容。

我正在从事 C++ 排序的常见项目,我正在 目前在做基数排序。我把它作为一个函数,接受一个 字符串向量、一个包含最大位数的整数和一个 带数字基数/基数的整数:(numbers, maxDigits, radix)

由于程序接受不同基数的数字并作为字符串, 我正在使用 stoi 将它们转换为以 10 为底的整数以使 过程更容易概括。以下是算法的简要总结:

创建 10 个队列来保存值 0 到 9 遍历每个数字(maxDigit 次) 遍历向量中的每个数字(这里它转换为以 10 为底) 根据它正在查看的当前数字将它们放入队列 将队列中的数字从头到尾拉回向量中

至于我试图解决的问题,我想在转换为基数 10 后将 maxDigit 值(使用用户输入的任何基数)更改为 maxDigit 值。换句话说,说用户使用了代码

radixSort(myVector, 8, 2)

用最大位数 8 和基数 2 对数字向量进行排序。由于我将数字的基数转换为 10,因此我正在尝试找到一种算法来更改 maxDigits,如果这样的话感觉。

我已经想了很多,试图通过反复试验找出一个简单的方法。如果我能在正确的方向上获得一些提示或帮助,那将是一个很大的帮助。

【问题讨论】:

【参考方案1】:

如果某事物的基数为 2,最大位数为 8,则其最大值全为 1。而11111111 = 255,即 (2^8 - 1)。

以 10 为底的最大位数将是表示该最大值所需的任何值。在这里我们看到它是 3。它是以 10 为底的对数 255 (2.406540​​18043),四舍五入到 3。

所以基本上只是将log10 (radix^maxdigits - 1) 向上取整到最接近的整数。

【讨论】:

以上是关于从不同的基数转换后查找位数的方法的主要内容,如果未能解决你的问题,请参考以下文章

codevs 进制转换类型x

将代码从5位转换为3位字符

如何从余数系统转换为混合基数系统?

在JAVA中从基础X转换为基础Y返回的不同于PHP中的相同函数

从十进制基数转换为十六进制基数c ++

排序方法之六:基数排序