Умножение больших чисел методом Карацубы

10.01.18

Разработка - Математика и алгоритмы

Алгоритм умножения больших чисел методом Карацубы, более эффективный, чем метод умножения в столбик.

Скачать исходный код

Наименование Файл Версия Размер
Умножение больших чисел методом Карацубы :
.epf 7,10Kb
0
.epf 7,10Kb Скачать

Кто-то пишет  на 1С игры, кто-то отчеты, а я написал обработку умножения больших чисел  методом Карацубы   Чтобы  было и для практики в написании рекурсивных функций.  Собственно, все к одной функции и свелось:
 

функция Умножение(знач ч1,знач ч2)
	ч1= строка(ч1);
	ч1=стрзаменить(ч1," ", "");
	ч2= строка(ч2);
	ч2=стрзаменить(ч2," ", "");
	если стрдлина(ч1)<=2 и стрдлина(ч2)<=2 тогда
		если (стрдлина(ч1)=1) тогда
			а=0; 
			б=число(ч1);
		иначе
			а=число(лев(ч1,1));
			б=число(прав(ч1,1));
		конецесли;
		если (стрдлина(ч2)=1) тогда
			в=0; 
Кто-то пишет  на 1с игры, кто-то, отчеты, а я написал обработку умножения больших чисел  методом Карацубы ссылка на википедию  https://ru.wikipedia.org/wiki/Умножение_Карацубы Что бы  было и для практики в написании рекурсивных функций.  Код обработки привожу ниже: 
			г=число(ч2);
		иначе
			в=число(лев(ч2,1));
			г=число(прав(ч2,1));
		конецесли;
		ЕСЛИ ((А+Б)>10 ИЛИ  (В+Г)>10) ТОГДА
			агбв=число(Умножение(а+б,в+г))-а*в-б*г;   
		ИНАЧЕ
			агбв=(А+Б)*(В+Г)-а*в-б*г;  		КОНЕЦЕСЛИ;
		р=100*а*в+10*(АГБВ)+б*г;
		р= строка(р);
		р=стрзаменить(р," ", "");
		возврат р;
	иначе
		м= макс(стрдлина(ч1),стрдлина(ч2));
		если м % 2 = 0 тогда
			к=0;	
		иначе 
			к=-1;
		конецесли;
		
		добить=м-стрдлина(ч1) ;
		Для  х=1 По добить  Цикл
			ч1="0"+ч1;	
		КонецЦикла;
		добить=м-стрдлина(ч2) ;
		Для  х=1 По добить  Цикл
			ч2="0"+ч2;	
		КонецЦикла;
		с=окр(м/2)+к;
		с1=м-с;
		а=лев(ч1,с1);
		б=прав(ч1,с);
		в=лев(ч2,с1);
		г=прав(ч2,с);
		ав=число(Умножение(а,в));
		бг=число(Умножение(б,г));
		агбв=число(Умножение((число(а)+число(б)),(число(в)+число(г))))-ав-бг;   
		р =Pow(10,м+к)*ав+Pow(10,с1+к)*агбв+бг;
		
		
	конецесли;
	р= строка(р);
	р=стрзаменить(р," ", "");
	возврат Р;
конецфункции

 

Умножение больших чисел метод Карацубы

См. также

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9395    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2239    25    progmaster    8    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16362    142    sapervodichka    112    

130

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7356    quazare    8    

110

Хитрости СКД. Часть 3

СКД Универсальные функции Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    9401    milkers    11    

94

Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

Универсальные функции БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

25.04.2022    15303    quazare    11    

138

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

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    17605    acces969    95    

148
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. acsent 1200 10.01.18 17:21 Сейчас в теме
Теперь попробуй Метод Шёнхаге - Штрассена
DrAku1a; rpgshnik; +2 Ответить
2. uri1978 137 10.01.18 18:25 Сейчас в теме
Только не понятно почему у Вас на скриншоте 687 х 6 = 3435
Painted; DrAku1a; +2 Ответить
5. swimdog 765 10.01.18 23:26 Сейчас в теме
(2) На рисунке ошибка. Умножение на 5.
8. Kosmovski 9 11.01.18 14:53 Сейчас в теме
(5) Я картинку умножения в столбик из интернета взял.
10. uri1978 137 11.01.18 15:27 Сейчас в теме
3. Lem0n 420 10.01.18 19:46 Сейчас в теме
Прибыль что ли считаете?
DrAku1a; rpgshnik; +2 Ответить
4. Kosmovski 9 10.01.18 20:55 Сейчас в теме
Нет, прибыль не считаю. Решил прослушать курс по алгоритмам на прометеусе. А там писать программы можно на любом языке который знаешь. Вот и реализовал на 1с. Там и другие алгоритмы будут, если будет интересно выложу.
6. headMade 144 11.01.18 12:58 Сейчас в теме
(4)
прометеусе

что конкретно за курс?
7. Kosmovski 9 11.01.18 14:52 Сейчас в теме
(6) курс по "Розробка та аналіз алгоритмів" ссылка https://edx.prometheus.org.ua/courses/KPI/Algorithms101/2015_Spring/info
как по мне довольно неплохо излагают но только если вы украинский язык понимаете. Буду старатся на 1с делать задания. А то последнее время мне после некоторых "1с-програмистов" такой код достается что стал сомневатся знают ли эти люди что такое алгоритм, а тут курс подвернулся дай думаю пройду может и я не знаю :-)
9. SerVer1C 750 11.01.18 15:26 Сейчас в теме
Умножение больших чисел для подсчета больших денег )
А если серьезно, то платформа и так оперирует с достаточно большими числами, которых для повседневных расчетов вполне достаточно, если вы, конечно, не считаете в эске миллионный член ряда Фибоначчи. А приведенный вами алгоритм по скорости выполнения в эске очень печальный.
Оставьте свое сообщение