blob: 8dfd26d25e9498de702f963daff05e81bf1b1001 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#!/usr/bin/env perl
use 5.024;
use warnings;
use experimental qw< postderef signatures >;
no warnings qw< experimental::postderef experimental::signatures >;
sub reverse_integer ($N) {
state $max_int = 0x7fffffff;
my ($s, $x) = $N > 0
? ('', scalar reverse("$N"))
: ('-', scalar reverse(''.(-$N)));
$x =~ s{0+\z}{}mxs;
my ($lx, $lm) = (length($x), length($max_int));
return $s . $x
if ($lx < $lm)
|| ($lx == $lm) && (substr($x, 0, 1) < 2);
return 0
if ($lx > $lm) # too long
|| substr($x, 0, 1) > 2; # highest digit too high
# same length, first digit is 2...
return $s
? ($x <= $max_int + 1 ? $s . $x : 0)
: ($x <= $max_int ? $x : 0);
}
my $x = shift || -1234;
say reverse_integer($x);
|