#!/usr/bin/perl use warnings; use strict; my $number; for(0..999) { $number .= int(rand 9); } print "$number\n\n"; print longdiv($number, 222) . "\n\n"; print longmul(longdiv($number, 222), 222) . "\n"; sub longdiv { my @digits = split //, shift; my $demoninator = shift; my $carry = 0; my $out = ''; my $numerator; while (@digits) { $numerator = shift @digits; $numerator += $carry * 10; $carry = $numerator % $demoninator; $out .= int($numerator / $demoninator) if @digits; } $out =~ s/^0+//; $out .= ($numerator / $demoninator); return $out; } sub longmul { my @digits = reverse split //, shift; my $multiplier = shift; my $out = ''; my ($digit, $progress); while (@digits) { $digit = shift @digits; if ($digit eq '.') { $out = '.' . $out; next; } $progress += $digit * $multiplier; $out = ($progress % 10) . $out; $progress = int($progress / 10); } $out = $progress . $out; return $out; }