Largest int from concatenated ints: Difference between revisions

Line 730:
 
=={{header|Pascal}}==
tested with freepascal.Used a more extreme example 23.
===algorithm 3===
<lang pascal>const
Line 736:
MaxDigitCnt = 11;
source1 : array[0..7] of integer = (1, 34, 3, 98, 9, 76, 45, 4);
source2 : array[0..3] of integer = (60, 54,545454546546,0548,60);
source3 : array[0..3] of integer = (60, 54,545454546,0);
 
type
Line 742 ⟶ 743:
datOrg,
datMod : LongWord;
datOrgDigitCnt,
datHighestDigit : Word;
datStrOrg : string[MaxDigitCnt];
end;
Line 751 ⟶ 750:
begin
with n do
begin
//InttoStr is very fast
str(datOrg,datStrOrg);
 
datOrgDigitCnt := length(datStrOrg);
end
end;
 
Line 772 ⟶ 769:
for cnt := High(ArrData) downto Low(ArrData) do
begin
t := length(ArrData[cnt].datOrgDigitCntdatStrOrg);
IF res < t then
res := t;
Line 779 ⟶ 776:
end;
 
procedure ExtendDataExtendCount(var ArrData:tArrData;newLen: integer);
var
cnt,
Line 788 ⟶ 785:
begin
datMod := datOrg;
i := newlen-datOrgDigitCntlength(datStrOrg);
k := 1;
while i > 0 do
Line 794 ⟶ 791:
datMod := datMod *Base+Ord(datStrOrg[k])-Ord('0');
inc(k);
IF k >datOrgDigitCntlength(datStrOrg) then
k := 1;
dec(i);
Line 835 ⟶ 832:
l := 0;
For i := High(ArrData) downto Low(ArrData) do
inc(l,length(ArrData[i].datOrgDigitCntdatStrOrg));
setlength(s,l);
l:= 1;
Line 841 ⟶ 838:
with ArrData[i] do
begin
move(datStrOrg[1],s[l],datOrgDigitCntlength(datStrOrg));
inc(l,datOrgDigitCntlength(datStrOrg));
end;
writeln(s);
Line 849 ⟶ 846:
procedure HighestInt(var ArrData:tArrData);
begin
ExtendDataExtendCount(ArrData,FindMaxLen(ArrData));
SortArrData(ArrData);
ArrDataOutput(ArrData);
Line 867 ⟶ 864:
For i := low(tmpData) to high(tmpData) do
InsertData(tmpData[i],source2[i]);
HighestInt(tmpData);
// Source3
setlength(tmpData,length(source3));
For i := low(tmpData) to high(tmpData) do
InsertData(tmpData[i],source3[i]);
HighestInt(tmpData);
end.</lang>
{{out}}
<pre>998764543431
6054854654
60545454546540</pre>
 
Anonymous user