Если вы думаете, что рудиментарный метод слишком медленно, вы можете использовать возведение в степень по квадратуре алгоритма для вычисления делителя: http://en.wikipedia.org/wiki/Exponentiation_by_squaring
Или вы можете использовать таблицу поиска:
int divisors_i[] = {1, 10, 100, 1000, 10*1000, ...}
unsigned long long divisors_ull[] = {1ULL, 10ULL, 100ULL, 1000ULL, 10ULL*1000ULL,
100ULL*1000ULL, 1000ULL*1000ULL,
10ULL*1000ULL*1000ULL, 100ULL*1000ULL*1000ULL, ...}
Обязательно выберите соответствующий тип данных для таблицы поиска. Если у вас есть int, используйте таблицу поиска int. Если у вас огромное количество, длинный длинный знак без знака может быть лучшим типом для использования.
Самый быстрый способ - использовать таблицу поиска. Он достаточно мал, чтобы вписаться в L1-кеш любого процессора, поэтому он быстрее, чем возведение в степень, возведение в квадрат.
Сталкивались ли вы какие-либо проблемы с 'зачаточной method'? –
Разделение с базой системы цифр (в этом случае 10). Это способ сделать это. Смещение фактических бит вокруг - это та же операция, что и деление/умножение на два (основание двоичной системы). Эти две операции в основном одинаковы. Это не означает, что вы не можете придумать какое-то другое решение, но я сомневаюсь, что есть более простой метод. – adam10603
'int rshift_digit (int value, int shift) {возвращаемое значение/(сдвиг 10 *); } ' –