uses crt;
const
n = 18;
procedure converter(var out:string;x:longint);
var str3,d: array [1..n] of longint;
i:integer;
s:longint;
begin
clrscr;
(*Вычисление str3 и d*)
str3[1]:=1;
d[1]:=1;
s:=1;
for i:=2 to n do
begin
str3[i]:=str3[i-1]*3;
d[i]:=s+1;
s:=s+str3[i];
end;
for i:=n downto 1 do
begin
if abs(x)>=d[i] then
if x>0 then
begin
out:=out+'1';
x:=x-s3[i];
end
else
begin
out:=out+'-1';
x:=x+str3[i];
end
else
out:= out+'0';
end;
end;
var str: string;
i:integer;
x: longint;
begin
clrscr;
writeln('Введите целое число в десятичной системе счисления [-193710244..193710244]');
readln(x);
if (x<-193710244) or (x>193710244) then
begin
writeln ('Error');
readln;
halt;
end;
converter(str,x);
writeln('Число в троичной уравновешенной системе счисления: ', str);
readln;
end.
перевод из 10 с.с. в троичную уравновешенную, можно ли короче это сделать? |