Вы можете сделать это с помощью простого цикла, разделив ваше число на 10 и сохраняя остаток каждый раз, пока число, наконец, не станет равным 0. В итоге вы получите массив чисел от 0 до 9, который вы можете затем печатать по одному за раз. Вы должны сохранить их перед печатью, потому что каждая цифра будет в обратном порядке. например:
Number | Buffer
123 | { EMPTY }
12 | 3 (123 / 10 = 12, remainder 3)
1 | 3 2 (12 / 10 = 1, remainder 2)
0 | 3 2 1 (1 / 10 = 0, remainder 1)
Каждый раз, когда вы добавляете число в буфер, увеличивайте свой счетчик. Как только вы закончили деление и теперь ваш номер равен 0, вы можете начать печать. Цикл от count
до 0
, распечатка номера, хранящегося в Buffer + count
.
Для буфера, если вы говорите, что каждое число может быть длиной до 4 байтов (32 бита), то вы знаете, что в десятичном виде наибольшее число, которое может быть представлено, - это либо 2147483647 (со знаком), либо 4294967295 (без знака) , В обоих случаях наибольшее количество цифр составляет 10, поэтому вы можете выделить буфер из 10 байтов (1 байт достаточно для хранения каждой цифры от 0 до 9).
Другая альтернатива (которую я сделал перед выполнением той же задачи, что и вы для другого чипа) - это использовать стек, а не выделять буфер, и помещать каждую цифру в стек на каждой итерации цикла. Оба способа довольно просты.
Я позволю вам придумать код, поскольку вы должны научиться делать это.
Редактировать: Это некоторый псевдокод общего метода, который я описал выше:
Buffer[10]
Num = 123
count = 0
// Split the number into an array of digits
WHILE Num IS NOT 0
Buffer[count] = Num % 10 // Store the remainder
Num = Num / 10
count++
count-- // count will be 1 more than the amount in Buffer
// Print the digits
WHILE count IS >= 0
PRINT Buffer[count]
count--