- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
{ Длинная арифметика.
[0] - длина числа
[1..1000] - цифры в системе с основанием 10000, записанные в обратном порядке
}
type TLong = array[0..1000] of integer;
procedure Add(A,B:TLong;var C:TLong);
{Здесь идет процедура сложения в столбик - ничего интересного}
procedure MulByShort(A:TLong;B:integer;var C:TLong); {умножение длинного на короткое}
var i:integer;
begin
initByZero(C);{инициализация C нулями}
for i:=1 to B do Add(C,A,C);
end;
Найдено в решении олимпиадной задачи на FreePascal. Обратите внимание на особо остроумный алгоритм умножения: надо же до такого додуматься. Также интересно, чем мотивирована передача массивов по значению.
guest 28.03.2010 18:12 # 0
frp 28.03.2010 19:27 # −1
guest 28.03.2010 22:20 # +3.6
guest 29.03.2010 07:10 # −1.2
guest 29.03.2010 11:40 # −0.2
frp 29.03.2010 16:17 # +0.2
guest 02.04.2010 09:56 # −2
guest 07.04.2010 13:23 # +1.8
guest6 21.11.2023 22:06 # 0