На современных компьютерах вычисления, как правило, выполняются намного быстрее, чем ввод-вывод, и так обстоит дело здесь. Библиотека C будет использовать простой подход. Опция по модулю используется для получения наименьшего значащего значения di git, а деление используется для получения значения di git и итерации. К сожалению, цифры генерируются в обратном порядке относительно порядка ввода / вывода, поэтому их необходимо буферизовать перед выводом. Это можно сделать с помощью рекурсии, но максимальное количество цифр известно априори, поэтому быстрее предварительно выделить массив символов.
Число может быть отрицательным, поэтому оно обрабатывается вне l oop .
char digits[N];
p = &digits[N-1];
*p-- = 0;
unsigned x = integer_input;
if (integer_input < 0 && integer_input >= -INT_MAX) x = -integer_input;
do {
*p-- = (x % 10) + '0';
x /= 10;
} while x != 0;
if (integer_input < 0) *p-- = '-'
// now p points to c string
Это как newlib это делает , хотя он поддерживает базы, отличные от 10.
Это как это делает glib c 1011 *.
Оба следуют подходу, описанному выше, хотя и обобщенно.