gpt4 book ai didi

c++ - 获得可整除整数的 10 的最大次方的高效算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:39 29 4
gpt4 key购买 nike

我想找到能整除给定整数的 10 的最大次方。

我现在有一个简单的实现

int factorBase10Exp(int number){
//...
int mBase10Exp = 0;
while(number%10 == 0 && number != 0)
{
number /= 10; mBase10Exp++;
}
//...
return mBase10Exp;
}

预期的输出是

factorBase10Exp(3000) = 3
factorBase10Exp(333) = 0

我不能将 std::log10 用作 log10(333) = 2.522,这会在我的用例中给出不正确的结果。

我可以做些什么来提高效率?

最佳答案

您可以使用一系列除法,每个除法的位数是前一个的一半。这为您提供了一种对零个数的二进制搜索。

if (number % 100000000 == 0)
{
number /= 100000000;
mBase10Exp += 8;
}
if (number % 10000 == 0)
{
number /= 10000;
mBase10Exp += 4;
}
if (number % 100 == 0)
{
number /= 100;
mBase10Exp += 2;
}
if (number % 10 == 0)
{
number /= 10;
mBase10Exp++;
}

第一个除法需要足够大,以覆盖整数 10 的最大幂的一半以上。

关于c++ - 获得可整除整数的 10 的最大次方的高效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282045/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com