diff options
| -rw-r--r-- | challenge-079/juliodcs/perl/ch-1.pl | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/challenge-079/juliodcs/perl/ch-1.pl b/challenge-079/juliodcs/perl/ch-1.pl index 5409ee8c5a..d88040dd85 100644 --- a/challenge-079/juliodcs/perl/ch-1.pl +++ b/challenge-079/juliodcs/perl/ch-1.pl @@ -14,16 +14,15 @@ use strict; use warnings; use feature 'say'; use experimental 'signatures'; +use bigint; use constant MODULE => 1000000007; -use constant INTEGER_LAST => 2**63 - 1; - use constant W_ACCURATE => 'Warning: intermediate result > Integer\'last. Result *may* not be accurate!'; use constant E_ACCURATE => 'Error: Number cannot be > Integer\'last'; use constant E_NO_NUMBER => 'You need to submit a number'; sub length_bin($number) { - length sprintf '%b', $number; + Math::BigInt->new($number)->blog(2) + 1 } # Given a number, it calculates the flips of the most-significant-bit number @@ -40,7 +39,6 @@ sub next_number($number) { sub calculate ( $number, $total = 0 ) { if ( $number == 0 ) { - say {*STDERR} W_ACCURATE if $total > INTEGER_LAST; return $total % MODULE; } @@ -57,6 +55,4 @@ my $number = shift // q(); die E_NO_NUMBER if $number !~ m{^\d+$}sxm; -die E_ACCURATE if $number > INTEGER_LAST; - say 'Result: ' . calculate($number); |
