一种有效的算法,可以得到10的最大幂,它可以除以一个整数
Efficient algorithm for getting the largest power of 10 which can divide an integer
我想找到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++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 当我们从/tp地址中添加/减去一个整数时会发生什么
- 如何将一个数组值合并为一个整数c++
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 我可以将迭代器递增一个整数吗?
- 有没有办法生成一个包含平方的序列,这些平方加起来就是一个整数平方?
- 我正在尝试制作一个程序,在添加 n 天(整数)后告诉一个人什么是一天(例如星期一等)
- 为什么将两个浮点数相加会得到一个整数C++?
- 编写一个读取五个整数并执行一些任务的C++程序
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 给枚举一个整数,并在 C++ 中将其相关值作为字符串获取
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 按升序输出整数时,将最后一个整数放在新行上
- 编写一个程序,提示用户输入一个整数,然后输出数字的单个数字和数字的总和
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 如何在C++中将一个值拆分为一个十进制整数
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 我必须更改我的数字最后一个数字和第一个数字,但不要使用仅带有整数或循环的函数.例如从 12345 到 52341
- 将整数范围映射到另一个范围