Non-decimal radices/Convert: Difference between revisions

Content added Content deleted
Line 655: Line 655:
link printf
link printf


procedure convert(i,b) #: convert i to base b
procedure convert(i,b) #: convert i to base b
static digits
static digits
initial digits := &digits || &lcase
initial digits := &digits || &lcase

i := integer(i) | runerr(101, i)
/b := 10 | ( 2 < (b := integer(b)) <= *digits ) | runerr(205,b)
i := integer(i) | runerr(101, i) # arg/error checking
/b := 10 | ( 2 < (b := integer(b)) <= *digits ) | runerr(205,b)
if b = 10 then return i

else {
if b = 10 then return i
p := (s := "", (i := -(0 > i),"-")|"") || b || "r"
else {
until i = 0 & *s > 0 do
s ||:= digits[1 + 1( i % b, i /:= b)]
p := (s := "", (i := -(0 > i),"-")|"") || b || "r" # prefix/setup
until i = 0 & *s > 0 do
return p || reverse(s)
s ||:= digits[1 + 1( i % b, i /:= b)]
}

return p || reverse(s)
}
end</lang>
end</lang>