Integer long division: Difference between revisions

Added Perl
m (→‎{{header|Raku}}: overline was off by one)
(Added Perl)
Line 199:
Cycle is <00019007793195210036114807070899068618133434708230374453525945637711461699296711651777228663752138376734461129062915795476145219540011404675917126021668884242539441170880060824938224672115567382626877019578026991066337198251283026040676677437749477285687131724006842805550275613001330545523664702528036494962934803269340429576126211746816194639802318950769815624406006462649686371412279034404105683330165367800798327314198821516821896977760881961604257745675727048089716783881391370461889374643603877589811822847367420642463409998099220680478996388519292910093138186656529176962554647405436228853830070328834822277133624786162326553887093708420452385478045998859532408287397833111575746055882911993917506177532788443261737312298042197300893366280174871697395932332256225052271431286827599315719444972438699866945447633529747196350503706519673065957042387378825318380536019768104923018437559399353735031362858772096559589431666983463219920167268580117848317810302223911803839574225432427295191028321611860862953811062535639612241018817715263257935753659>
Period is 1052</pre>
 
=={{header|Perl}}==
<lang perl>use strict;
use warnings;
 
sub long_division {
my($n, $d) = @_;
my %seen;
 
my($numerator,$denominator) = (abs $n, abs $d);
my $negative = ($n < 0 xor $d < 0) ? '-' : '';
 
my $fraction = sprintf '%d.', $numerator / $denominator;
my $position = length $fraction;
$numerator %= $denominator;
while (!$seen{$numerator}) {
return 0, $fraction =~ s/\.$//r unless $numerator;
$seen{$numerator} = $position;
$fraction .= int 10 * $numerator / $denominator;
$numerator = 10 * $numerator % $denominator;
$position++;
}
 
my $period = length($fraction) - $seen{$numerator};
substr $fraction, $seen{$numerator}, 0, '{'; $fraction .= '}';
$period, $negative . $fraction
}
 
printf "%10s Period is %5d : %s\n", $_, long_division split '/'
for <0/1 1/1 1/5 1/3 -1/3 1/7 -83/60 1/17 10/13 3227/555 1/149></lang>
{{out}}
<pre> 0/1 Period is 0 : 0
1/1 Period is 0 : 1
1/5 Period is 0 : 0.2
1/3 Period is 1 : 0.{3}
-1/3 Period is 1 : -0.{3}
1/7 Period is 6 : 0.{142857}
-83/60 Period is 3 : -1.38{3}
1/17 Period is 16 : 0.{0588235294117647}
10/13 Period is 6 : 0.{769230}
3227/555 Period is 4 : 5.8{144}
1/149 Period is 148 : 0.{0067114093959731543624161073825503355704697986577181208053691275167785234899328859060402684563758389261744966442953020134228187919463087248322147651}</pre>
 
=={{header|Phix}}==
2,392

edits