Anonymous user
Zeckendorf arithmetic: Difference between revisions
m
→{{header|Elena}}
(Added Go) |
|||
Line 603:
=={{header|Elena}}==
{{trans|C++}}
ELENA 3.
<lang elena>import extensions.
const dig = ("00","01","10").
const dig1 = ("","1","10").
sealed struct ZeckendorfNumber :: BaseNumber
{
int dVal.
int dLen.
clone
= ZeckendorfNumber
[
int i := s length - 1.
int q := 1.
dLen := i / 2.
dVal := 0.
while (i >= 0)
[
dVal += ((intConvertor convert(s[i]) - 48) * q).
q *= 2.
i -= 1.
].
]
[
val
len
]
sealed
[
int i := n.
while (true)
[
Line 650:
dLen := i.
].
((dVal >> (i * 2)) && 3) =>
0 [ ^
1 [ ^
2 [
ifnot ((dVal >> ((i + 1) * 2)) allMask:1)
[
^
].
dVal += (1 << (i*2 + 1)).
^
];
3 [
dVal := dVal && ((3 << i*2) inverted).
].
i += 1.
].
]
inc
[
dVal += 1.
]
[
if (pos == 0) [ ^
ifnot((dVal >> pos) allMask:1)
[
dVal += (1 << pos).
if (pos > 1) [
];
[
dVal := dVal && (1 << pos) inverted.
].
]
[
if ((dVal >> pos) allMask:1)
[
dVal := dVal && (1 << pos) inverted.
^
].
if (pos > 0)
[
];
[
]
]
internal constructor
[
int mVal := 0.
int mLen := 0.
n
m
0 till((mLen + 1) * 2) do(:GN)
[
if (mVal shiftRight:GN; allMask:1)
[
].
].
]
internal constructor
[
int mVal := 0.
int mLen := 0.
n
m
0 till((mLen + 1) * 2) do(:GN)
[
if (mVal shiftRight:GN; allMask:1)
[
].
].
while ((((dVal >> (dLen*2)) && 3) == 0) || (dLen == 0))
[
Line 754:
].
]
internal constructor
[
n
var Na := m.
var Nb := m.
var Nr := 0n.
var Nt := 0n.
0 to((dLen + 1) * 2) do(:i)
[
Line 774:
Na := Nt.
].
Nr
]
internal constructor
[
dVal := v.
dLen := l.
]
T<literal> literal
[
if (dVal == 0)
[ ^ "0". ].
literal s := dig1[(dVal >> (dLen * 2)) && 3].
int i := dLen - 1.
Line 794:
[
s := s + dig[(dVal >> (i * 2)) && 3].
i-=1
].
^ s.
]
add(ZeckendorfNumber n)
= ZeckendorfNumber
subtract(ZeckendorfNumber n)
= ZeckendorfNumber
multiply(ZeckendorfNumber n)
= ZeckendorfNumber
}
[
console printLine("Addition:").
var n := 10n.
n += 10n.
console printLine(n).
Line 826:
n += 10101n.
console printLine(n).
console printLine("Subtraction:").
n := 1000n.
Line 834:
n -= 1010101n.
console printLine(n).
console printLine("Multiplication:").
n := 1001n.
Line 842:
n += 101n.
console printLine(n).
]
{{out}}
<pre>
|