Какой самый быстрый способ реализацииКаков самый быстрый способ получить наивысшую десятичную цифру целого числа?
template <typename T>
unsigned highest_decimal_digit(T x);
(например, который возвращает 3 для 356431, 7 для 71 и 9 для 9)?
Лучшее, что я могу думать:
- constexpr-вычислить «среднего размера» мощность 10, которая вписывается в Т.
- выполнить бинарный поиск (над силами 10, возможно, используя constexpr-built lookup table), чтобы найти p, наивысшая мощность -10 ниже, чем x.
- возвращение х делится на р
... но может быть, есть другой подход.
Примечания:
- Я высказал вопрос, и мой подход в C++ 14ish терминов, и решение в коде было бы хорошо, но абстрактное решение (или даже решение в сборке x86_64) было бы хорошо. Однако я хочу что-то, что будет работать для всех (беззнаковых) целых типов.
- Вы можете игнорировать подписанные интегральные типы.
- Я не указал, что такое «быстрая», но, пожалуйста, будь то аппаратно-зависимым.
Использует строки не допускается ?? ..... – yobro97
@manlio действительно, и даже лучший ответ там соответствует моим: P – Vesper
@ yobro97: Нет никакой возможности, чтобы любая работа со строками позволяла быстро решать проблему. – einpoklum