Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2013, 14:01   #1
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию Интересно узнать вашу версию решения задачи.

Программа для подсчета суммы и разности 100 разрядных чисел.

Я пробовал написать программу используя массив char [100]. На мой взгляд коряво получилось. У кого есть идеи как по другому решить эту задачу.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 11.01.2013, 14:13   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

массив чисел
Carbon вне форума Ответить с цитированием
Старый 11.01.2013, 14:24   #3
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
массив чисел
я понимаю что все так просто. А поподробней.
При сложении я просто использовал поразрядную проверку если сумма разрядов больше 10 то единица переносится в следующий. Но это мне кажется очень топорно использовать массив char. А как вы предлагаете использовать массив чисел. Более детально алгоритм опишите. Исходники не принципиальны мне главное идея.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 11.01.2013, 14:31   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Исходники не принципиальны мне главное идея
Вот тут идея описана:
http://en.wikipedia.org/wiki/Binary-coded_decimal
EUGY вне форума Ответить с цитированием
Старый 11.01.2013, 14:43   #5
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Так как у меня с английским не очень, но кое что понял и на первый взгляд это не совсем то что я хотел бы узнать.
Наверное я не совсем правильно сформулировал.

Суть задачи создание 100 разрядного числа. Но я считаю что использование например массива char[100] или массива char[50], при условии использования байта как 0-9 и 0-99 соответственно слишком топорно и уродливо. Нельзя ли создать тип данных для хранения 100 разрядного числа другим способом.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 11.01.2013, 14:53   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,089
По умолчанию

Называется это длинная арифметика. Решение в лоб: реализация сложения/вычитания в столбик, как делали в начальной школе.
Хранить можно как угодно, только вот суммировать проблематично потом будет, если с алгоритмом это не увязать.

Последний раз редактировалось pu4koff; 11.01.2013 в 15:00.
pu4koff вне форума Ответить с цитированием
Старый 11.01.2013, 15:01   #7
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Называется это длинная арифметика. Решение в лоб: реализация сложения/вычитания в столбик, как делали в начальной школе.
Я это прекрасно понимаю. Но это не отвечает на вопрос как программным путем реализовать 100 разрядное число на c++. Я может раньше не оговаривал что речь идет об этом языке программирования, но я думал это понятно потому что тема находится в соответствующей ветке.

Пока кроме уродливого массива char идей никаких нет.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 11.01.2013, 15:05   #8
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Так как у меня с английским не очень, но кое что понял и на первый взгляд это не совсем то что я хотел бы узнать.
Наверное я не совсем правильно сформулировал.
Длинная арифметика и основана на двоично-десятичном представлении.
Четыре бита на десятичный разряд. А у Вас байт на разряд.
Попробуйте битовые поля:
Код:
struct digit
{
unsigned b1 : 1;
unsigned b2 : 1;
unsigned b3 : 1;
unsigned b4 : 1;
};
Правда выравнивание все равно будет не меньше байта...
EUGY вне форума Ответить с цитированием
Старый 11.01.2013, 15:08   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,089
По умолчанию

зачем обязательно char? Чем он отличается от int в данном случае?
Тип тут можно любой выдумать, лишь бы он был кратен байту. Хотя есть даже bitset, но по сути там всё равно всё до байтов округляется при хранении.
Так вот... Можно выделить нужное число байт под 100 разрядное число. Через двоичный логарифм это даже вычисляется легко. Только вот обрабатывать потом это дело будет неудобно, т.к. хранение то будет в двоичной системе, а операции основаны на десятичной. Пусть себе будет байт на один разряд, памяти всё равно копейки будет расходоваться по современным меркам, зато проще арифметические операции реализовывать будет.
ЗЫ. Я так понимаю, что это учебная задача, поэтому особо заморачиваться тут не стоит. В реальном коде всё равно будут использоваться для этого проверенные временем библиотеки.
pu4koff вне форума Ответить с цитированием
Старый 11.01.2013, 15:11   #10
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Длинная арифметика и основана на двоично-десятичном представлении.
Четыре бита на десятичный разряд. А у Вас байт на разряд.
Попробуйте битовые поля:
Код:
struct digit
{
unsigned b1 : 1;
unsigned b2 : 1;
unsigned b3 : 1;
unsigned b4 : 1;
};
Правда выравнивание все равно будет не меньше байта...

Ясно. Значит у меня с английским еще хуже чем я думал. Но идею я понял. но это точно не будет оличаться если я один байт буду представлять как от 0 до 9)))
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать версию сервера? Vit@L БД в Delphi 2 04.11.2011 16:54
Олимпиадная задача просто интересно решения Pein95 Паскаль, Turbo Pascal, PascalABC.NET 5 14.12.2010 16:22
Узнать версию Indy из исходников FreeBrain Помощь студентам 2 01.09.2010 19:49
Узнать версию WINDOWS dimonbest Win Api 1 29.12.2008 12:07