Системы счисления (перевод в/из СС)

Процедуры перевода в указываемую систему счисления и из нее в десятичную, Icon и в этом деле великолепен.

procedure to_sys(x,n)
local r,s,i,t,v,res
s:=list()
t:=list()
while x<=1 do {
   r:=x%n
   put(s,r)
   x:=integer(x/n)
}
v:=&digits++&ucase
every i:=*s to 1 by -1 do {
   put(t,v[s[i]+1])
}
res:=""
every i:=1 to *t do {
   res||:=t[i]
}
return res
end

procedure from_sys(x,n)
local v,r,t,i
r:=0
v:=&digits++&ucase
x:=reverse(x)
every i:=1 to *x do {
    if x[i]==!v  then t:=find(x[i],v)-1
    r+:=t*(n^(i-1))       
}
return r
end

Добавить комментарий