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

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

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





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Р,где...

Философские школы эпохи эллинизма (неоплатонизм, эпикуреизм, стоицизм, скептицизм). Эпоха эллинизма со времени походов Александра Македонского, в результате которых была образована гигантская империя от Индии на востоке до Греции и Македонии на западе...

Демографияда "Демографиялық жарылыс" дегеніміз не? Демография (грекше демос — халық) — халықтың құрылымын...

Субъективные признаки контрабанды огнестрельного оружия или его основных частей   Переходя к рассмотрению субъективной стороны контрабанды, остановимся на теоретическом понятии субъективной стороны состава преступления...

Индекс гингивита (PMA) (Schour, Massler, 1948) Для оценки тяжести гингивита (а в последующем и ре­гистрации динамики процесса) используют папиллярно-маргинально-альвеолярный индекс (РМА)...

Методика исследования периферических лимфатических узлов. Исследование периферических лимфатических узлов производится с помощью осмотра и пальпации...

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

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