Я хочу найти наибольшую мощность 10, которая может делить заданное целое число.Эффективный алгоритм получения наибольшей мощности 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
Я не могу использовать зЬй :: log10, как log10 (333) = 2.522, что дало бы неправильно результаты в моем случае использования.
Что я могу сделать, чтобы сделать это более эффективным?
Вам нужно сделать это более эффективным? Требуется ли кто-то/что-то? Если ваш код работает медленно, не ожидайте, что подобные вещи станут узким местом, сначала начнется оценка – Creris
. Вы можете использовать двоичный поиск, но для 32 бит я нахожу его излишним. –
Вы не получите ничего разумного быстрее для 'int'. Теперь у вас есть O (бит), вы можете легко опуститься до O (ln (бит)), но я не уверен, что постоянные факторы не будут использовать разницу для небольших чисел. – luk32