Re: SRC: число - значение последних N цифр исходного
От: Кодт Россия  
Дата: 26.08.02 14:53
Оценка:
Здравствуйте Flamer, Вы писали:

F>Как обычно, замечания/предложения — сюда.


Для скорости — можно значения степеней десятки хранить в таблице.
Все равно из потребуется не более [log10(2^32)]+1 = 11

unsigned exp10(unsigned long i)
{
#define KILO 1000
#define MEGA KILO * KILO
#define GIGA KILO * MEGA
  static const unsigned table[] = {
    1,        10,        100,
    1 * KILO, 10 * KILO, 100 * KILO,
    1 * MEGA, 10 * MEGA, 100 * MEGA,
    1 * GIGA
    // для __int64 == long long нужно таблицу расширить до 1000^6
  };
  const unsigned max_i = sizeof(table) / sizeof(table[0]) - 1;

  if(i > max_i) i = max_i;
  return table[i];
}

unsigned lower_n_decimals(int value, unsigned n) { return value % exp10(n); }


Если же табличный метод чем-то не нравится, то ускорить вычисление целой степени числа (10) можно с помощью двоичного алгоритма.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.