Function aToDec(n:string;k:integer):longint; { Перевод из системы по основанию k в десятичную } var i:integer; pa,s:longint; begin s:=0; pa:=1; for i:=Length(n) downto 1 do begin s:=s+pa*(Ord(n[i])-Ord('0')); pa:=pa*k end; aToDec:=s end;
function DecToa(n:longint;k:integer):string; { Перевод из десятичной системы в систему по основанию k } var s:string; c:integer; begin s:=''; c:=Ord('0'); while n>0 do begin s:=Chr(c+n mod k)+s; n:=n div k end; DecToa:=s end;
function AtoB(s:string;A,B:integer):string; { Перевод из системы по основанию A в систему по основанию B } begin AtoB:=DecToa(aToDec(s,A),B) end;
var a,b:integer; n:string; begin Write('Число в c/c по основанию [2;10]: '); Readln(n); Writeln('Укажите исходное и результирующее основания: '); Read(a,b); Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')'); end.
Пример решения Число в c/c по основанию [2;10]: 643342414 Укажите исходное и результирующее основания: 7 9 643342414(7) = 80050347(9)
{ Перевод из системы по основанию k в десятичную }
var
i:integer;
pa,s:longint;
begin
s:=0;
pa:=1;
for i:=Length(n) downto 1 do begin
s:=s+pa*(Ord(n[i])-Ord('0'));
pa:=pa*k
end;
aToDec:=s
end;
function DecToa(n:longint;k:integer):string;
{ Перевод из десятичной системы в систему по основанию k }
var
s:string;
c:integer;
begin
s:='';
c:=Ord('0');
while n>0 do begin
s:=Chr(c+n mod k)+s;
n:=n div k
end;
DecToa:=s
end;
function AtoB(s:string;A,B:integer):string;
{ Перевод из системы по основанию A в систему по основанию B }
begin
AtoB:=DecToa(aToDec(s,A),B)
end;
var
a,b:integer;
n:string;
begin
Write('Число в c/c по основанию [2;10]: '); Readln(n);
Writeln('Укажите исходное и результирующее основания: ');
Read(a,b);
Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')');
end.
Пример решения
Число в c/c по основанию [2;10]: 643342414
Укажите исходное и результирующее основания:
7 9
643342414(7) = 80050347(9)
s: string;
n,m: integer;
begin
readln(n);
if (n <= 9) then write(n)
else if (n <= 9 + 9) then
begin
s := inttostr(n - 9);
write(s + s);
end
else if (n <= 9 + 9 + 90) then
begin
s := inttostr(n - 9 -9 + 10 -1);
m:=s.Length-1;
write(s + s[m:0:-1]);
end
else if (n <= 9 + 9 + 90 + 90) then
begin
s := inttostr(n - 9 - 9 + 90 + 10 - 1);
write(s + s[::-1]);
end
else if (n <= 9 + 9 + 90 + 90 + 900) then
begin
s := inttostr(n - 9 - 9 - 90 - 90 + 100 - 1);
m:=s.Length-1;
write(s + s[m:0:-1]);
end
else if (n <= 9 + 9 + 90 + 90 + 900 + 900) then
begin
s := inttostr(n - 9 - 9 - 90 - 90 - 900 + 100 - 1);
write(s + s[::-1]);
end
else if (n <= 9 + 9 + 90 + 90 + 900 + 900 + 9000) then
begin
s := inttostr(n - 9 - 9 - 90 - 90 - 900 - 900 + 1000 - 1);
m:=s.Length-1;
write(s + s[m:0:-1]);
end
else if (n <= 9 + 9 + 90 + 90 + 900 + 900 + 9000 + 9000) then
begin
s := inttostr(n - 9 - 9 - 90 - 90 - 900 - 900 - 9000 + 1000 - 1 );
write(s + s[::-1]);
end
else
begin
s := inttostr(n - 9 - 9 - 90 - 90 - 900 - 900 - 9000 - 9000 + 10000 - 1);
m:=s.Length-1;
write(s + s[m:0:-1]);
end
end.