Largest int from concatenated ints: Difference between revisions

Content added Content deleted
(→‎Version 4: improved the function integer to handle the kast case)
m (→‎Version 4: minor improvement)
Line 2,113: Line 2,113:
===Version 4===
===Version 4===
{{trans|NetRexx}}
{{trans|NetRexx}}
<lang rexx>/*REXX program constructs the largest integer from an integer list using concatenation.*/
<lang rexx>/*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.=''; 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.2 = '54 546 548 60' /* " 2nd " " " " " */
l.3 = ' 4 45 54 5' /* " 3rd " " " " " */
l.3 = ' 4 45 54 5' /* " 3rd " " " " " */
l.4 = ' 4 45 54 5 6.6e77' /* " 4th " " " " " */
l.4 = ' 4 45 54 5 6.6e77' /* " 4th " " " " " */
l.5 = ' 3 3 .2' /* " 5th " " " " " */
l.5 = ' 3 3 .2' /* " 5th " " " " " */
l.6 = ' 4 45 54 5 6.6e1001' /* " 4th " " " " " */
l.6 = ' 4 45 54 5 6.6e1001' /* " 4th " " " " " */
l.7 = ' 10e999999999 5' /* " 4th " " " " " */
l_length=0
l_length=0
Do li=1 By 1 While l.li<>''
Do li=1 By 1 While l.li<>''
Line 2,127: Line 2,128:
Do li=1 By 1 While l.li<>''
Do li=1 By 1 While l.li<>''
z=''
z=''
msg=''
Do j=1 To words(l.li)
Do j=1 To words(l.li)
int=integer(word(l.li,j))
int=integer(word(l.li,j))
If int='?' Then Do
If int='?' Then Do
Say left(space(l.li),l_length) '-> ** invalid ** bad integer' word(l.li,j)
Say left(space(l.li),l_length) '-> ** invalid ** bad list item:' word(l.li,j) msg
Iterate li
Iterate li
End
End
Line 2,136: Line 2,138:
z=z int
z=z int
End
End
/*Say copies(' ',l_length) ' ' soll.li */
Say left(space(l.li),l_length) '->' largeint(z)
Say left(space(l.li),l_length) '->' largeint(z)
End
End
Exit
Exit


integer: Procedure
integer: Procedure Expose msg
Numeric Digits 1000
Numeric Digits 1000
Parse Arg z
Parse Arg z
Line 2,147: Line 2,148:
Return z+0
Return z+0
Else Do
Else Do
If Datatype(z)=num Then Do
If Datatype(z,'NUM') Then Do
Do i=1 To 4
Do i=1 To 6 Until dig>=999999999
dig= digits()*10
dig= digits()*10
dig=min(dig,999999999)
Numeric Digits dig
Numeric Digits dig
If Datatype(z,'W') Then
If Datatype(z,'W') Then
Return z+0
Return z+0
End
End
Say 'Illegal integer:' z
msg='cannot convert it to an integer'
Return '?'
Return '?'
End
End
Return '?'
Else Do
msg='not a number (maybe larger than 1e999999999)'
End
Return '?'
End
End


largeint: Procedure
largeint: Procedure
Line 2,183: Line 2,188:
list=list w.ww
list=list w.ww
End
End
Return space(list,0)</lang>
Return space(list,0)
</lang>
{{out}}
{{out}}
<pre>1 34 3 98 9 76 45 4 -> 998764543431
<pre>1 34 3 98 9 76 45 4 -> 998764543431
Line 2,189: Line 2,195:
4 45 54 5 -> 554454
4 45 54 5 -> 554454
4 45 54 5 6.6e77 -> 660000000000000000000000000000000000000000000000000000000000000000000000000000554454
4 45 54 5 6.6e77 -> 660000000000000000000000000000000000000000000000000000000000000000000000000000554454
3 3 .2 -> ** invalid ** bad list item: .2 cannot convert it to an integer
Illegal integer: .2
4 45 54 5 6.6e1001 -> 660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554454
3 3 .2 -> ** invalid ** bad integer .2
10e999999999 5 -> ** invalid ** bad list item: 10e999999999 not a number (maybe larger than 1e999999999)</pre>
4 45 54 5 6.6e1001 -> 660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554454</pre>


=={{header|Ring}}==
=={{header|Ring}}==