To pytanie jest inspirowane tą odpowiedzią . Przypadkowo, kiedy byłem dzieckiem, używałem mnożenia etnicznego, ale do niedawna nie znałem nazwy tej metody.
Etiopskie mnożenie to metoda mnożenia liczb całkowitych przy użyciu tylko dodawania, podwajania i zmniejszania o połowę.
Metoda:
- Weź dwie liczby do pomnożenia i zapisz je u góry dwóch kolumn.
- W lewej kolumnie kilkakrotnie zmniejsz o połowę ostatnią liczbę, odrzucając resztki i zapisz wynik poniżej ostatniej w tej samej kolumnie, aż zapiszesz wartość 1.
- W prawej kolumnie wielokrotnie powtarzaj ostatnią liczbę i wpisz wynik poniżej. zatrzymaj się, gdy dodasz wynik w tym samym wierszu, w którym w lewej kolumnie pokazuje 1.
- Sprawdź wyprodukowaną tabelę i odrzuć każdy wiersz, w którym wartość w lewej kolumnie jest parzysta. Zsumuj wartości w prawej kolumnie, które pozostały, aby uzyskać wynik pomnożenia dwóch oryginalnych liczb.
Na przykład: 17 x 34
17 34
Zmniejszenie o połowę pierwszej kolumny:
17 34
8
4
2
1
Podwojenie drugiej kolumny:
17 34
8 68
4 136
2 272
1 544
Przekreśl wiersze, których pierwsza komórka jest parzysta, zrobimy to, umieszczając liczby po prawej stronie w nawiasach kwadratowych:
17 34
8 [68]
4 [136]
2 [272]
1 544
Zsumuj pozostałe liczby w prawej kolumnie:
17 34
8 [68]
4 [136]
2 [272]
1 544
=====
578
Zatem 17 pomnożone przez 34, metodą etiopską jest 578.
Zadanie:
Kod golfowy, który przyjmuje dwie liczby od 1 do 1000 i wykonuje ten sam układ i algorytm, wyświetlając produkt poniżej.
Metoda wprowadzania: jednak wybierasz ...
Przykładowe dane wejściowe:
19 427
Wynikowy wynik:
19 427
9 854
4 [1708]
2 [3416]
1 6832
======
8113
Zwróć uwagę na wyrównanie cyfr. Jest to najważniejsze w układzie. Zauważ również, że podwójna linia ułożona znakami równości musi być o dwa znaki dłuższa niż ogólna odpowiedź i musi być wyśrodkowana.
Testowanie
Jak będziesz to testować? Udostępniając przebieg programu za pomocą dwóch liczb. Liczby te można wyodrębnić z numeru identyfikacyjnego użytkownika (można to uzyskać, najeżdżając kursorem na awatar w górnym oknie). Weź swój numer i weź trzy ostatnie cyfry, będzie to liczba B, weź wszystko, co pozostanie z przodu, to będzie liczba A. Następnie sprawdź A razy B.
Przykład testowy:
Mój numer identyfikacyjny użytkownika to 8555, więc moje numery to 8 i 555. Więc moje dane wyjściowe powinny wyglądać następująco:
8 [555]
4 [1110]
2 [2220]
1 4440
======
4440
Ograniczenia:
Żadne natywne operatory mnożenia nie są dozwolone, z wyjątkiem „podwajania”, jak wspomniano w algorytmie. Innymi słowy, jeśli używasz operatora takiego jak *, można go użyć tylko do pomnożenia przez 2.
Zgłoszenia niezgodne z powyższym nie będą brane pod uwagę, a użytkownik zostanie wyprowadzony z lokalu z tekturowym pudełkiem pełnym swoich rzeczy. Każdy wpis będzie miał kod plus test oparty na numerze identyfikacyjnym użytkownika.
To jest kod golfowy. Najmniejsza liczba bajtów otrzyma nagrodę, chwałę i podziw swoich rówieśników ... (A może Lamborghini ... Powiedziałem „może”!)
*
lubx
), ale nie można wykryć, czy używane jest mnożenie. Oprócz tej części wyzwanie jest interesujące.