获取 a 的位数的有效方法是boost::multiprecision::cpp_int
什么?该log10()
函数显然与多精度整数不兼容,我想不出任何其他方法来做到这一点。
问问题
808 次
2 回答
2
您可以使用.str().size()
.
const cpp_int n = cpp_int("123456789") * cpp_int("987654321");
const size_t digits = n.str().size(); // digits == 18
它看起来很浪费,但比 log10 或除以 10 更快。
于 2015-03-25T04:48:32.923 回答
0
如果不需要转换为 cpp_dec_float 1(我猜不是),您可以除以 10:
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
using Int = boost::multiprecision::cpp_int;
using Float = boost::multiprecision::cpp_dec_float_50;
int main() {
Int demo("12345678912345678");
int digits = 0;
for (Int tmp = abs(demo); tmp > 0; tmp /= 10)
digits += 1;
std::cout << digits << ", " << ceil(log10(Float(demo))) << "\n";
}
这可能会针对非常大的整数进行优化(从 1000000 除数开始,例如直到值变得小于该除数)。我会让我的分析器指导这种优化(因为很容易得到错误的结果)。
于 2015-02-08T18:18:01.640 回答