Печать длинного числаvoid numprint (const number_t lhs) { int i; printf ("%d", NUMLEN (lhs)? lhs[NUMLEN (lhs)]: 0); for (i = NUMLEN(lhs) - 1; i > 0; --i) printf ("%09d", lhs[i]); } Операция сложения длинных чисел реализует обычное сложение чисел столбиком. Вспомним, как она выполняется. Пусть надо сложить два числа 12345 и 678. Записываем их в столбик таким образом, чтобы младшие разряды числа оказались друг под другом. После этого по таблице сложения складываем независимо разряды друг с другом. Если результат превосходит 9, то запоминаем 1, переносим ее в старший разряд, а в текущем записываем младший разряд от результата сложения. И так продолжается до тех пор, пока все разряды не будут учтены. Обратите внимание, что если длина чисел разная, то в старших разрядах более длинного числа сложение производится только с «запомненной» 1 переноса. Схема вычислений может быть следующей:
Сложение чисел выполняется функцией numadd(), которая принимает два числа – слагаемые и записывает результат в параметр с именем res. Данная функция выбирает из двух слагаемых более короткое и сначала складывает разряды двух чисел, а затем, когда все разряды более короткого числа будут учтены, добавляет оставшиеся разряды более длинного числа с учетом переноса, признак которого хранится в переменной c. Так как цифры числа хранятся в обратном порядке, то сложение осуществляется по возрастанию индексов массива. Программный код функции будет таким:
|