Здравствуйте 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) можно с помощью двоичного алгоритма.