Re: число -> стpока
- From
- Andrew Ezhguroff ()
- To
- Oleg Prizov
- Date
- 2002-12-02T01:49:58Z
- Area
- RU.ALGORITHMS
From: "Andrew Ezhguroff" <eandr@com2com.ru>
Привет! "Oleg Prizov" <Oleg.Prizov@p133.f150.n469.z2.fidonet.org>
сообщил(а):
OP> Есть целое положительное большое число, не пpевышающее 2^2048,
OP> записанное в массиве А вида
OP> var A:array[1..2048] of byte
OP> Искомое число pавно А[1]+A[2]*2^8+A[3]*2^16+...+a[1024]*2^(8*2047)
OP> Как можно его пеpевести в удобночитаемый вид и вывестм на стандаpтный
OP> вывод (экpан) в десятичной системе счисления? Т.е. если A[1]=56,
OP> a[2]=78, a[3]=a[4]=...=a[2048]=0, то на экpан необходимо вывести 20024.
Например, вот так (работоспособность кода не проверялась):
procedure OutVal(A: array[1..2048] of byte);
var BufStr: array [1..5000] of char;
IdxStr: integer;
Tmp : integer;
FlgNul: boolean;
i : integer;
begin
IdxStr:=5001;
repeat
Tmp := 0;
FlgNul:=true;
for i:=2048 downto 1 do begin
Tmp:=Tmp*256+A[i];
A[i]:=Tmp div 10;
Tmp :=Tmp mod 10;
FlgNul:=FlgNul and (A[i]=0);
end;
IdxStr:=IdxStr-1;
BufStr[IdxStr]:=Tmp+'0';
until FlgNul;
for i:=IdxStr to 5000 do
write(BufStr[i]);
writeln;
end;
1. Предполагается, что byte - беззнаковый тип.
2. Алгоритм можно существенно ускорить, если на каждом проходе учитывать
первый ненулевой байт. Например, так:
procedure OutVal(A: array[1..2048] of byte);
var BufStr: array [1..5000] of char;
IdxStr: integer;
Tmp : integer;
IdxVal: integer;
BegVal: integer;
i : integer;
begin
IdxStr:=5001;
IdxVal:=2048;
repeat
Tmp := 0;
FlgNul:=true;
BegVal:=IdxVal;
IdxVal:=0;
for i:=BegVal downto 1 do begin
Tmp:=Tmp*256+A[i];
A[i]:=Tmp div 10;
Tmp :=Tmp mod 10;
if (IdxVal=0) and (A[i]<>0) then
IdxVal:=i;
end;
IdxStr:=IdxStr-1;
BufStr[IdxStr]:=Tmp+'0';
until IdxVal=0;
for i:=IdxStr to 5000 do
write(BufStr[i]);
writeln;
end;
С уважением, Андрей.
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
* Origin: Talk.Mail.Ru (2:5020/400)