wth? It is the inverse of longdiv. Well, aside from the fact that longdiv gives the wrong answer. 15000000 is not equal to 2000000 + 206/222.
#!/usr/bin/perl -w
use strict;
sub longdiv {
# take the parameter passed into the sub and store in $in
my $in = shift;
...
# return the result
return ($out, $carry);
}
sub longmul {
my ($div, $mod) = @_;
my $out = sprintf('%06d', substr($div, -3, 3, '') * 222 + $mod);
while (length($div)) {
substr($out, 0, 3, sprintf('%04d',
substr($out, 0, 3) + substr($div, -1, 1, '') * 222
));
}
$out =~ s/^0+//;
return $out;
}
# call the function and print the output
my ($out, $carry) = longdiv("15000000");
print("$out, $carry\n"); # WRONG. Should be 67567 and 126.
print(longmul($out, $carry), "\n");
print(longmul('67567', 126), "\n");
|