从不同的基数转换后查找位数的方法
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.40654018043),四舍五入到 3。
所以基本上只是将log10 (radix^maxdigits - 1)
向上取整到最接近的整数。
【讨论】:
以上是关于从不同的基数转换后查找位数的方法的主要内容,如果未能解决你的问题,请参考以下文章