42 lines
1 KiB
Text
42 lines
1 KiB
Text
F encode_neg_base(=n, b)
|
||
I n == 0
|
||
R ‘0’
|
||
[Int] out
|
||
L n != 0
|
||
(n, V rem) = divmod(n, b)
|
||
I rem < 0
|
||
n++
|
||
rem -= b
|
||
out.append(rem)
|
||
R reversed(out).map(String).join(‘’)
|
||
|
||
F decode_neg_base(nstr, b)
|
||
I nstr == ‘0’
|
||
R 0
|
||
V total = 0
|
||
L(ch) reversed(nstr)
|
||
V i = L.index
|
||
total += Int(ch) * b ^ i
|
||
R total
|
||
|
||
print(‘Encode 10 as negabinary (expect 11110)’)
|
||
V result = encode_neg_base(10, -2)
|
||
print(result)
|
||
I decode_neg_base(result, -2) == 10
|
||
print(‘Converted back to decimal’)
|
||
E
|
||
print(‘Error converting back to decimal’)
|
||
print(‘Encode 146 as negaternary (expect 21102)’)
|
||
result = encode_neg_base(146, -3)
|
||
print(result)
|
||
I decode_neg_base(result, -3) == 146
|
||
print(‘Converted back to decimal’)
|
||
E
|
||
print(‘Error converting back to decimal’)
|
||
print(‘Encode 15 as negadecimal (expect 195)’)
|
||
result = encode_neg_base(15, -10)
|
||
print(result)
|
||
I decode_neg_base(result, -10) == 15
|
||
print(‘Converted back to decimal’)
|
||
E
|
||
print(‘Error converting back to decimal’)
|