Largest int from concatenated ints: Difference between revisions

→‎{{header|REXX}}: added another version
m (→‎exponentiated integers: added a comment to the REXX section header.)
(→‎{{header|REXX}}: added another version)
Line 2,042:
660000000000000000000000000000000000000000000000000000000000000000000000000000545454 max for: { 4, 45, 54, 5, 6.6e77}
</pre>
===Alternate Version===
Inspired by the previous versions.
<lang>/*REXX program constructs the largest integer from an integer list using concatenation.*/
l.=''; l.1 = '1 34 3 98 9 76 45 4' /*the 1st integer list to be used. */
l.2 = '54 546 548 60' /* " 2nd " " " " " */
l.3 = ' 4 45 54 5' /* " 3rd " " " " " */
l.4 = ' 4 45 54 5 6.6e77' /* " 4th " " " " " */
l.5 = ' 3 3 .2' /* " 5th " " " " " */
/*
soll.1=998764543431
soll.2=6054854654
soll.3=554454
soll.4=660000000000000000000000000000000000000000000000000000000000000000000000000000545454
*/
l_length=0
Do li=1 By 1 While l.li<>''
l_length=max(l_length,length(space(l.li)))
End
 
Do li=1 By 1 While l.li<>''
z=''
Do j=1 To words(l.li)
int=integer(word(l.li,j))
If int='?' Then Do
Say left(space(l.li),l_length) '-> ** invalid ** bad integer' word(l.li,j)
Iterate li
End
Else
z=z int
End
/*Say copies(' ',l_length) ' ' soll.li */
Say left(space(l.li),l_length) '->' largeint(l.li)
End
Exit
 
integer: Procedure
Numeric Digits 1000
Parse Arg z
If Datatype(z,'W') Then
Return z+0
Else
Return '?'
 
largeint:
result=''
Do While z<>'' /* [?] check the rest of the integers.*/
big=word(z,1); index=1; LB=length(big) /*assume that first integer is biggest.*/
do k=2 to words(z);
n=word(z,k) /*obtain an integer from the list. */
L=max(LB,length(n)) /*get the maximum length of the integer*/
if left(n,L,left(n,1))<<=left(big,L,left(big,1)) then iterate
big=n; index=k /*we found a new biggie (and the index)*/
LB=length(big)
End /*k*/
z=delword(z,index,1) /*delete this maximum integer from list*/
result=result||big /*append " " " ---? $. */
end /*while z*/ /* [?] process all integers in a list.*/
Return result</lang>
{{out}}
<pre>1 34 3 98 9 76 45 4 -> 998764543431
54 546 548 60 -> 6054854654
4 45 54 5 -> 554454
4 45 54 5 6.6e77 -> 660000000000000000000000000000000000000000000000000000000000000000000000000000554454
3 3 .2 -> ** invalid ** bad integer .2</pre>
 
=={{header|Ring}}==
2,295

edits