例如:十进制数100006在二进制、三进制、四进制、五进制、六进制、七进制和八进制中分别可以用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
所以错误在于一个数字。我希望有人能帮助我纠正公式,使其适用于所有可能的情况。
编辑:根据输入规范,我必须处理像10000000000这样的情况,即10^10,我不认为C/C++中的log10()可以处理这样的情况?因此,对于此问题的任何其他过程/公式都将受到高度赞赏。
log()
函数时,我惊讶地发现它更简单! - PP.int size = static_cast<int>((log10((double)num) / log10((double)base)) + 1.000001);
- Alexey Malistov