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

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

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





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. Нарушение авторских прав; Мы поможем в написании вашей работы!




Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


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


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

ТЕХНИКА ПОСЕВА, МЕТОДЫ ВЫДЕЛЕНИЯ ЧИСТЫХ КУЛЬТУР И КУЛЬТУРАЛЬНЫЕ СВОЙСТВА МИКРООРГАНИЗМОВ. ОПРЕДЕЛЕНИЕ КОЛИЧЕСТВА БАКТЕРИЙ Цель занятия. Освоить технику посева микроорганизмов на плотные и жидкие питательные среды и методы выделения чис­тых бактериальных культур. Ознакомить студентов с основными культуральными характеристиками микроорганизмов и методами определения...

САНИТАРНО-МИКРОБИОЛОГИЧЕСКОЕ ИССЛЕДОВАНИЕ ВОДЫ, ВОЗДУХА И ПОЧВЫ Цель занятия.Ознакомить студентов с основными методами и показателями...

Этические проблемы проведения экспериментов на человеке и животных В настоящее время четко определены новые подходы и требования к биомедицинским исследованиям...

Классификация потерь населения в очагах поражения в военное время Ядерное, химическое и бактериологическое (биологическое) оружие является оружием массового поражения...

Факторы, влияющие на степень электролитической диссоциации Степень диссоциации зависит от природы электролита и растворителя, концентрации раствора, температуры, присутствия одноименного иона и других факторов...

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