Багато мов програмування надають операторам для управління двійковими (база-2) цифрами цілих чисел. Ось один із способів узагальнення цих операторів на інші бази:
Нехай х і у будуть однозначними числами номера в базі B . Визначимо унарний оператор ~
і бінарні оператори &
, |
і ^
такі , що:
- ~ х = (В - 1) - х
- x & y = хв (х, у)
- х | y = max (x, y)
- x ^ y = (x & ~ y) | (y & ~ x)
Зауважте, що якщо B = 2, ми отримуємо знайомі побітові оператори NOT, AND, OR і XOR.
Для B = 10 ми отримуємо таблицю «десяткових XOR»:
^ │ 0 1 2 3 4 5 6 7 8 9
──┼────────────────────
0 │ 0 1 2 3 4 5 6 7 8 9
1 │ 1 1 2 3 4 5 6 7 8 8
2 │ 2 2 2 3 4 5 6 7 7 7
3 │ 3 3 3 3 4 5 6 6 6 6
4 │ 4 4 4 4 4 5 5 5 5 5
5 │ 5 5 5 5 5 4 4 4 4 4
6 │ 6 6 6 6 5 4 3 3 3 3
7 │ 7 7 7 6 5 4 3 2 2 2
8 │ 8 8 7 6 5 4 3 2 1 1
9 │ 9 8 7 6 5 4 3 2 1 0
Для багатоцифрових чисел застосуйте одноцифровий оператор розрядно до цифри. Наприклад, 12345 ^ 24680 = 24655, оскільки:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Якщо операнди різної довжини, то прокладіть коротший з провідними нулями.
Змагання
Напишіть у якомога менше байтах програму або функцію, яка приймає за вхід два цілих числа (які можуть вважатись між 0 і 999 999 999 включно) і виводить «десятковий XOR» з двох чисел, як визначено вище.
Тестові справи
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
прийнятний результат для введення 90, 99
?
A^B^B=A
a^b=b^a
і a^b^b=a
для баз з непарним головним дільником