Nhiều ngôn ngữ lập trình cung cấp các toán tử để thao tác các chữ số nhị phân (cơ số 2) của các số nguyên. Đây là một cách để khái quát các toán tử này sang các cơ sở khác:
Hãy x và y là các số đơn chữ số trong cơ sở B . Xác định các nhà điều hành unary ~
và khai thác nhị phân &
, |
và ^
như vậy:
- ~ x = (B - 1) - x
- x & y = phút (x, y)
- x | y = tối đa (x, y)
- x ^ y = (x & ~ y) | (y & ~ x)
Lưu ý rằng nếu B = 2, chúng ta sẽ nhận được các toán tử bit, AND, OR và XOR quen thuộc.
Với B = 10, chúng ta có được bảng XOR thập phân của Nhật Bản:
^ │ 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
Đối với các số có nhiều chữ số, áp dụng toán tử một chữ số theo chữ số. Ví dụ: 12345 ^ 24680 = 24655, vì:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Nếu các toán hạng có độ dài khác nhau, thì đệm ngắn hơn với các số 0 đứng đầu.
Các thách thức
Viết, càng ít byte càng tốt, một chương trình hoặc hàm lấy hai số nguyên đầu vào (có thể được giả định là từ 0 đến 999 999 999, đã bao gồm) và xuất ra số thập phân XOR của hai số như được xác định ở trên.
Các trường hợp thử nghiệm
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
một kết quả chấp nhận được cho một đầu vào 90, 99
?
A^B^B=A
a^b=b^a
và a^b^b=a
cho các cơ sở với ước số nguyên tố lẻ