Birçok programlama dili, tamsayıların ikili (taban-2) basamaklarını işlemek için operatörler sağlar. İşte bu operatörleri diğer üslere genellemenin bir yolu:
Let X ve Y bir baz ile, tek basamaklı sayı olduğu B . Tek terimli operatörü tanımlayın ~
ve ikili operatörler &
, |
ve ^
öyle ki:
- ~ x = (B - 1) - x
- x & y = dak (x, y)
- x | y = maks. (x, y)
- x ^ y = (x & ~ y) | (y & ~ x)
B = 2 ise, tanıdık bitsel olarak NOT, AND, OR ve XOR operatörlerini elde ettiğimizi unutmayın.
B = 10 için, “ondalık XOR” tablosunu alırız:
^ │ 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
Çok basamaklı sayılar için, tek basamaklı operatörü basamak basamak uygulayın. Örneğin, 12345 ^ 24680 = 24655, çünkü:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Eğer işlenenler farklı uzunluklarda ise, daha kısa olanı baştaki sıfırlarla doldurun.
Meydan okuma
Mümkün olduğunca az bayt olarak, giriş iki tamsayısını (0 ile 999 999 999 arasında dahil olduğu varsayılabilir) alan ve yukarıda tanımlanan iki sayının “ondalık XOR” değerini çıkaran bir program veya işlev yazın.
Test senaryoları
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
bir giriş için, kabul edilebilir bir sonuç 90, 99
?
A^B^B=A
a^b=b^a
ve hem de a^b^b=a
üsleri olamaz