Banyak bahasa pemrograman menyediakan operator untuk memanipulasi bilangan bulat biner (basis-2). Berikut adalah salah satu cara untuk menggeneralisasi operator ini ke pangkalan lain:
Biarkan x dan y menjadi nomor satu digit dalam basis B . Tentukan operator unary ~
dan operator biner &
,|
dan ^
sehingga:
- ~ x = (B - 1) - x
- x & y = mnt (x, y)
- x | y = maks (x, y)
- x ^ y = (x & ~ y) | (y & ~ x)
Perhatikan bahwa jika B = 2, kita mendapatkan operator TIDAK bitwise, AND, OR, dan XOR yang familiar.
Untuk B = 10, kita mendapatkan tabel “desimal 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
Untuk nomor multi-digit, terapkan operator satu digit digit-demi-digit. Misalnya, 12345 ^ 24680 = 24655, karena:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Jika operan memiliki panjang yang berbeda, maka masukkan yang lebih pendek dengan nol di depannya.
Tantangan
Tulis, sesedikit mungkin byte, suatu program atau fungsi yang mengambil input dua bilangan bulat (yang dapat diasumsikan antara 0 dan 999 999 999, inklusif) dan mengeluarkan "XOR desimal" dari dua angka sebagaimana didefinisikan di atas.
Uji kasus
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
hasil yang dapat diterima untuk input 90, 99
?
A^B^B=A
a^b=b^a
dan a^b^b=a
untuk pangkalan dengan pembagi utama yang aneh