1. Pascal / Говнокод #2882

    +91.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 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. Обратите внимание на особо остроумный алгоритм умножения: надо же до такого додуматься. Также интересно, чем мотивирована передача массивов по значению.

    Запостил: frp, 28 Марта 2010

    Комментарии (9) RSS

    • Это-же олимпиада, сроки могут быть сжать и лучше работающее некрасивое решение, чем красивое, но не работающее.
      Ответить
      • Сроки сжаты, но 5 часов достаточно чтобы написать нормальный алгоритм умножения в столбик. Можно обойтись без процедур Add и initByZero и в результате получится даже короче.
        Ответить
      • сдается мне это некрасивое решение поймало бы tl тесте на втором третьем. так что сроки - это не критерий и задача бы не была принята скорее всего
        Ответить
    • Ну если человек идет на олимпиаду, базовые алгоритмы следует знать. Книг много и не использовать умножение в столбик, а тем более сумму.
      Ответить
      • "не использовать умножение в столбик" - это как? Предлагаете писать ффт или Карацубу-Офмана? (который все ровно суть умножение в столбик) :)
        Ответить
        • FFT и Карацуба не принесут никакой пользы при умножении длинного на короткое.
          Ответить
    • На олимпиадах в таких случаях юзайте Java с её java.math.BigInteger
      Ответить
      • Т.е. предлагаете из программы на delphi вызывать java?
        Ответить
    • On the Putin's elections I will vote against Vladimir Vladimirovich.
      Ответить

    Добавить комментарий