Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Представление длинных чисел

6.6K
14 сентября 2008 года
Mendler
48 / / 20.09.2006
Мне необходимо сделать представление длинных чисел ввиде односвязного списка.
1->2->3->null
где в звеньях хранится число непревышающее 2^16.
P.S.В интернете есть хелпы только по массивам.
1.6K
14 сентября 2008 года
Vov4ick
476 / / 01.02.2007
В чём конкретно проблема?
Первый элемент - младший, последующие - старшие.
Для выполнения арифметических операций вспоминаем, как делать это в столбик на бумаге и реализуем.
Если нужно много выводить на экран (в десятичной СС), есть смысл хранить числа не в двоичном, а в двоично-десятичном представлении.
6.6K
14 сентября 2008 года
Mendler
48 / / 20.09.2006
Проблема в том, что этот список должен существовать в памяти, т.е. при старте программы выделяеца под него память и удаляется только по завершении самой программы. Для изменения значения в звене необходимо "извлечь" его из списка, изменить значение, "поставить" обратно в список.
С массивами понятно, а вот со списками не могу докумекать как это делается вообще :\
1.6K
14 сентября 2008 года
Vov4ick
476 / / 01.02.2007
Каждый элемент списка - структура. Один её элемент - указатель на такую же структуру (следующую), другой - хранимые данные, в твоём случае двухбайтовое число. Также необходим указатель, который указывает на первую структуру списка. Если указатель на следующий элемент списка равен нулю, значит текущий элемент последний.
Вот какая-то лаба, с подробными комментариями, что к чему.
6.6K
15 сентября 2008 года
Mendler
48 / / 20.09.2006
Списки то я знаю, а вот как реализовать списки по моему вопросу? :)
1.6K
15 сентября 2008 года
Vov4ick
476 / / 01.02.2007
Я же ответил на этот вопрос. Что конкретно непонятно?
За вас я это делать не буду, с такими "вопросами" пожалуйте в коммерческий раздел.
6.6K
15 сентября 2008 года
Mendler
48 / / 20.09.2006
Допустим вводим число по запросу: char *ch = new ch[N]; cin >> ch;
Как теперь занести его в данный список?
1.6K
15 сентября 2008 года
Vov4ick
476 / / 01.02.2007
Стандартно. Вспоминаем, как работают системы счисления, а именно как читать написанное число. К значению первой цифры прибавляем значение второй, умноженноена основание СС, потом значение третьей, умноженное на основание СС в квадрате и так далее.
Для этого тебе понадобится написать функцию умножения твоего длиного числа на короткое (а потом и на длинное). Вспоминаем умножение в столбик.
6.6K
16 сентября 2008 года
Mendler
48 / / 20.09.2006
Это если число уже в нашей системе счисления, а если оно в десятичной надо делить, вот как перевести число в десятичной системе, в систему с основанием 2^16, а потом только занести в список? Если работаем с длинными числами...
1.6K
16 сентября 2008 года
Vov4ick
476 / / 01.02.2007
Умножать, а не делить, я же написал. Записываешь в длинное число-список единицу и последовательно умножаешь на цифры десятичного числа, умноженные на 10 в нужной степени.
6.6K
16 сентября 2008 года
Mendler
48 / / 20.09.2006
Нипонятно, мы же получим в списке десятичное число...
Можно пример? :\

P.S. Допустим берем число 5 343 858, пеерводим в число по основанию 2^16, получаем 81*(2^16)+35442. т.е. записываем в список 81->35442?
1.6K
16 сентября 2008 года
Vov4ick
476 / / 01.02.2007
Пардон, глюк-с. :-) Конечно прибавляем. Стандартный алгоритм перевода записи числа в значение числа. Разница будет лишь в том, что число хранится в виде списка. Его в принципе можно (и даже нужно) рассматривать как 65536-ричную СС при выполнении с ним арифметических операций, соответственно твоя основная задача - написать функции, выполняющие эти операции. Ввод числа с клавиатуры сведётся к вызову этих функций.
6.6K
17 сентября 2008 года
Mendler
48 / / 20.09.2006
Вопрос таки все еще тогда открыт, как делить длинное число на 2^16? Не средством же number/(pow(2,16));
1.6K
17 сентября 2008 года
Vov4ick
476 / / 01.02.2007
Не нужно его делить на 2^16. У тебя функции умножения и сложения должны работать с длинными числами. Сформулируй вопрос конкретно, как и что ты хочешь делать и что не понятно.
6.6K
17 сентября 2008 года
Mendler
48 / / 20.09.2006
Я ввожу число с клавиатуры: храню его в char*, как затем его преобразовать в список по основанию 2^16? A+B*BASE+..., где BASE=2^16, а в звеньях хранится A->B->...
Почему не делить то?
1.6K
17 сентября 2008 года
Vov4ick
476 / / 01.02.2007
Наводящий вопрос: что на что ты делишь, когда складываешь и умножаешь в столбик? По-моему ничего ;-)
Пиши мне в аську, чтобы форум пустыми сообщениями не засорять.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог