Сложение длинных чисел
void numadd (number_t res, const number_t lhs, const number_t rhs) { int i = 0; Флаг переноса int c = 0; Число с минимальной длинной const int *sn = NUMLEN (lhs) < NUMLEN (rhs)? lhs: rhs; Число с максимальной длиной const int *ln = sn == lhs? rhs: lhs; Складываем два числа if (i < NUMLEN (sn)) { ++i; res[i] = c + sn[i] + ln[i]; c = res[i] > NUMBASE? 1: 0; if (c) res[i] -= NUMBASE; } Добавляем остаток от более длинного числа и перенос if (i < NUMLEN (ln)) { ++i; res[i] = c + ln[i]; c = res[i] > NUMBASE? 1: 0; if (c) res[i] -= NUMBASE; } Учитываем последний перенос if (c) res[++i] = c; Сохраняем длину числа res[0] = i; } Рассмотрим пример использования арифметики длинных чисел. Функция main() создает три переменные для хранения длинных чисел, инициализирует их значениями и выполняет операцию сложения, после чего печатает результат на экране. Программный код главной функции выглядет следуюшим образом: int main (int argc, char** argv[]) { int i; number_t a, b, c; numassgns (a, 1234567890); numassgns (b, 1); numadd (c, a, b); numprint (c); printf("\n\n... Press any key: "); getch(); return 0; } Задание 1. Создайте функцию numtoa(), выполняющую преобразование длинного числа в строку. Функция должна иметь следующий прототип: Перевод длинного числа в строку void numtoa (const number_t num, char**str); 2. Создайте функцию atonum(), выполняющую преобразование строки в длинное число. Функция должна иметь такой прототип:
|