一种有效的算法,可以得到10的最大幂,它可以除以一个整数

Efficient algorithm for getting the largest power of 10 which can divide an integer

本文关键字:整数 一个 一种 有效 算法      更新时间:2023-10-16

我想找到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次方的一半以上。

因此,当以十进制形式书写时,实际上需要测量数字末尾有多少个零。如果你能找到一种将数字转换为字符串的快速算法,那么你就可以计算零了。

相关文章: