Largest int from concatenated ints: Difference between revisions
Content added Content deleted
Walterpachl (talk | contribs) (→Version 4: improved the function integer to handle the kast case) |
Walterpachl (talk | contribs) 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 |
<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 |
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) |
If Datatype(z,'NUM') Then Do |
||
Do i=1 To |
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 |
||
msg='cannot convert it to an integer' |
|||
Return '?' |
Return '?' |
||
End |
End |
||
Else Do |
|||
msg='not a number (maybe larger than 1e999999999)' |
|||
⚫ | |||
Return '?' |
|||
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) |
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 |
||
⚫ | |||
Illegal integer: .2 |
|||
⚫ | 4 45 54 5 6.6e1001 -> 660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554454 |
||
⚫ | |||
10e999999999 5 -> ** invalid ** bad list item: 10e999999999 not a number (maybe larger than 1e999999999)</pre> |
|||
⚫ | 4 45 54 5 6.6e1001 -> 660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000554454 |
||
=={{header|Ring}}== |
=={{header|Ring}}== |