Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Сложение длинных чисел





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(), выполняющую преобразование строки в длинное число. Функция должна иметь такой прототип:







Дата добавления: 2015-09-06; просмотров: 382. Нарушение авторских прав; Мы поможем в написании вашей работы!




Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...


Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Общая и профессиональная культура педагога: сущность, специфика, взаимосвязь Педагогическая культура- часть общечеловеческих культуры, в которой запечатлил духовные и материальные ценности образования и воспитания, осуществляя образовательно-воспитательный процесс...

Устройство рабочих органов мясорубки Независимо от марки мясорубки и её технических характеристик, все они имеют принципиально одинаковые устройства...

Ведение учета результатов боевой подготовки в роте и во взводе Содержание журнала учета боевой подготовки во взводе. Учет результатов боевой подготовки - есть отражение количественных и качественных показателей выполнения планов подготовки соединений...

Studopedia.info - Студопедия - 2014-2026 год . (0.012 сек.) русская версия | украинская версия