问题是推导出一个公式来确定给定十进制数在给定基数中可能具有的位数。
例如:十进制数 100006 可以分别以 2、3、4、5、6、7、8 为基数的 17、11、9、8、7、6、8 位表示。
到目前为止,我得出的公式是这样的:(log10(num) /log10(base)) + 1。
在 C/C++ 中,我使用这个公式来计算上面给出的结果。
long long int size = ((double)log10(num) / (double)log10(base)) + 1.0;
但遗憾的是,在某些情况下,公式没有给出正确答案,例如:
Number 8 in base 2 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 64 in base 2 : 1,0,0,0,0,0,0
Number of digits: 7
Formula returned: 6
Number 64 in base 4 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 125 in base 5 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 128 in base 2 : 1,0,0,0,0,0,0,0
Number of digits: 8
Formula returned: 7
Number 216 in base 6 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 243 in base 3 : 1,0,0,0,0,0
Number of digits: 6
Formula returned: 5
Number 343 in base 7 : 1,0,0,0
Number of digits: 4
Formula returned: 3
所以错误是 1 位数。我只是希望有人帮助我更正公式,以便它适用于所有可能的情况。
编辑:根据输入规范,我必须处理像 10000000000 之类的情况,即 10^10,我认为任何 C/C++ 中的 log10() 都不能处理这种情况?因此,对于这个问题的任何其他程序/公式都将受到高度赞赏。