26 lines
702 B
Text
26 lines
702 B
Text
procedure main()
|
|
every ( ns := "16r5a" | "-12r1a" ) &
|
|
( b := 8 | 12 | 16 ) do {
|
|
ns2 := convert(n := numeric(ns),b)
|
|
printf("ns=%s -> n=%d -> %s\n",ns,n,ns2)
|
|
}
|
|
end
|
|
|
|
link printf
|
|
|
|
procedure convert(i,b) #: convert i to base b radix representation
|
|
static digits
|
|
initial digits := &digits || &lcase
|
|
|
|
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 {
|
|
p := (s := "", (i := -(0 > i),"-")|"") || b || "r" # prefix/setup
|
|
until i = 0 & *s > 0 do
|
|
s ||:= digits[1 + 1( i % b, i /:= b)]
|
|
|
|
return p || reverse(s)
|
|
}
|
|
end
|