Ознакомьтесь с нашей политикой обработки персональных данных
21:59 

Большие числа

Пропускай все через сердце
Здравствуйте!
Для учебной задачи пишу класс больших чисел, важной является именно самостоятельная реализация.
Понимаю,примеров много, но все таки ничто так не даст понимания,как самостоятельное написание,а,увы,с алгоритмикой совсем плохо(
Пишу на С#, но это не слишком принципиально.
Большое число представлено в виде массива, каждый элемент которого-разряд, представляет собой число от 0 до 9.
Инициализация, вывод-есть.
Есть !=, ==.
Так же перегрузила сложение, -- и ++.
Умножение-в процессе-более-менее.
Проблема с делением. Я вообще не представляю, как это можно сделать. (Деление большого числа на маленькое)
Деление-как деление в столбик. Но я даже приступиться не могу(
Буду благодарная за любого рода помощь, хотя бы принцип реализации, как это все надо реализовывать.
Спасибо большое...
Если необходимо-код приложу...

Комментарии
2009-11-25 в 22:07 

tven
Торговец знаниями
Если оба числа представлены в виде массива, проходишь по циклу с условиями начиная с конца к началу и по правилам деления в столбик осуществляешь операцию, только целочисленную. Там, при определённых условиях, получается два цикла, afair.

2009-11-25 в 22:13 

Пропускай все через сердце
Первое число-массив, а второе - просто int типа.
Ну вроде бы и понятно...но и вместе с тем облом(

2009-11-25 в 23:28 

rid.er
Случайности не случайны
я на с++ делал деление большого числа на число не превышающее разряд просто по циклу с начала большого числа делить каждый разряд на малое число, начинать с левой стороны числа, тоесть от больших разрядов, ну и сделать проверку чтобы делимое число было больше делителя и если что корректировать результат
Вы и так уже реализовали самое сложное)

2009-11-25 в 23:40 

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

меня например смущает вопрос, как осуществить деление,например,на двузначное число, если число от 0 до 9 на него по определению не делится
как вот осуществить "займ-не займ", объединение нескольких разрядов

2009-11-25 в 23:59 

rid.er
Случайности не случайны
.masa я реализовывал числа немного не так, у меня 1 разряд был трехзначным числом, то есть делить и умножать можно было на числа от 0 (000) до 999, а чтобы захватывать соседний разряд я даже не знаю как делать...может разложить как-то делитель на числа поменьше
самое сложное это умножение и деление большого на большое я его так и не сделал:(

2009-11-26 в 00:10 

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

2009-11-26 в 00:14 

Пропускай все через сердце
если интересно,код

2009-11-26 в 06:38 

tven
Торговец знаниями
Алгоритм выглядит примерно так: берём делитель, преобразуем его в такое же большое число (через цикл деления на десятки) и далее по делению в столбик.
Т.е. взяли первые цифры обоих чисел, пытаемся поделить первое на второе. Не получилось? Значит умножаем первую цифру делимого на 10, прибавляем вторую цифру, пытаемся поделить нацело. Если получилось, находим остаток, и т. д.

2009-11-26 в 08:39 

rid.er
Случайности не случайны
я в c# коде понимаю без словаря плохо)
умножение - умножаем последний элемент числа на то что нужно, если получилось больше 9 то остаток от деления на 10 пишем в результат, а целую часть запоминаем, умножаем следующий элемент на то что нужно и к результату прибавляем запомненную целую часть, и снова если больше 9
а насчет конца массива - я делал ф-цию которая "разворачивает" массив и начинал все действия с 1 элемента, а после выполнения нужных действий "разворачивал" массив обратно так проще мне кажется)

Комментирование для вас недоступно.
Для того, чтобы получить возможность комментировать, авторизуйтесь:
 
РегистрацияЗабыли пароль?

ru_programming

главная