На це питання надихає ця відповідь . Випадково я використовував ефіопське розмноження ще в дитинстві, але ніколи не знав назви методу.
Ефіопське множення - це метод множення цілих чисел, використовуючи лише додавання, подвоєння та подвоєння.
Спосіб:
- Візьміть два числа, які потрібно помножити, і запишіть їх у верхній частині двох стовпців.
- У лівій колонці кілька разів вдвічі зменшуйте останнє число, відкидаючи залишки, і записуйте результат нижче останнього в тому ж стовпці, поки не запишете значення 1.
- У правому стовпчику кілька разів подвоюйте останнє число і записуйте результат нижче. зупинити, коли ви додасте результат у тому ж рядку, що і в стовпці зліва від 1.
- Вивчіть створену таблицю та відкиньте будь-який рядок, де значення в лівому стовпчику є парним. Підсумовуйте значення у правому стовпчику, які залишаються для отримання результату множення вихідних двох чисел разом.
Наприклад: 17 x 34
17 34
Половина першого стовпця:
17 34
8
4
2
1
Подвоєння другого стовпця:
17 34
8 68
4 136
2 272
1 544
Закреслені рядки, перша клітинка яких рівна, ми це зробимо, додавши ці цифри праворуч у квадратні дужки:
17 34
8 [68]
4 [136]
2 [272]
1 544
Підсумовуйте решта цифр у правій колонці:
17 34
8 [68]
4 [136]
2 [272]
1 544
=====
578
Отже, 17 помножених на 34, за ефіопським методом - 578.
Завдання:
Код гольфу, який займає два числа від 1 до 1000 і виконує однаковий макет і алгоритм, відображаючи продукт нижче.
Спосіб введення: Однак ви виберете ...
Приклад введення:
19 427
Отриманий результат:
19 427
9 854
4 [1708]
2 [3416]
1 6832
======
8113
Зверніть увагу на вирівнювання цифр. Це найважливіше в макеті. Також зауважте, що подвійний рядок, викладений рівними знаками, повинен бути на два символи довше загальної відповіді і повинен бути виправданим у центрі.
Тестування
Як ви будете тестувати це? Забезпечивши запуск програми за допомогою двох номерів. Ці номери можна отримати з вашого ідентифікаційного номера користувача (це можна отримати, якщо навести курсор на аватар у верхньому вікні). Візьміть своє число і візьміть три останні цифри, це буде число B, візьміть все, що залишилося на передній частині, це число A. Потім перевіряйте на A рази B.
Приклад тестування:
Мій ідентифікаційний номер користувача - 8555, тому мої номери - 8 і 555. Отже, мій вихід повинен виглядати так:
8 [555]
4 [1110]
2 [2220]
1 4440
======
4440
Обмеження:
Жоден власний оператор множення не дозволяє заощаджувати при використанні "подвоєння", як зазначено в алгоритмі. Іншими словами, якщо ви використовуєте оператор типу *, його можна використовувати лише для множення лише на 2.
Записи, які не дотримуються цього, не будуть враховані, і користувач буде супроводжуватись приміщеннями картонною коробкою, наповненою їхніми речами. Кожен запис матиме код плюс тест на основі вашого ідентифікаційного номера користувача.
Це код гольфу. Найменша кількість байтів отримає приз, славу та захоплення своїх ровесників ... (І, можливо, Ламборгіні ... Я сказав "можливо"!)
*
абоx
), але неможливо визначити, чи використовується множення чи ні. Крім тієї частини, цікавий виклик.