Кто-то пишет на 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+к)*агбв+бг;
конецесли;
р= строка(р);
р=стрзаменить(р," ", "");
возврат Р;
конецфункции