我正在用Perl编写一些代码来测试数字并确定它们的所有数字是完全偶数还是完全奇数。我使用$ARGV[0] = 3
和$ARGV[1] = 1
运行了该计划。我遇到了一些麻烦,并在每次外循环通过时添加了一行来检查$n
的值。 $n
的值为1,2和2.我想知道为什么$n
增加到1。
这是我的代码:
#!/usr/bin/perl
use warnings;
my $even = 0;
my $odd = 0;
my $limit = $ARGV[0]; #highest number considered
my $places = $ARGV[1]; #number of places in said number
for($x = 1; $x <= $limit; $x++){
my @z;
my $tot = 0;
my $c = $x;
for($n = 1; $n <= $places; $n++){
$z[$n] = $c % 2;
$tot = $tot + $z[$n];
$c = $c - $z[$n];
if($c == 0){
last;
}
$c = $c / 10;
}
print $n;
if ($tot == 0) {
$even++;
}elsif($tot == 1) {
$odd++;
}
}
print $even . "\n";
print $odd;
我之前没有使用Perl编码,如果它有点不合适,那就很抱歉。
答案 0 :(得分:2)
您在循环后打印$n
的值。在循环$n
递增(1
)之后,循环$n
的第一次迭代设置为$n++
,然后$n <= $places
看到2 > 1
所以for循环终止,因此打印2
。
答案 1 :(得分:2)
我正在用Perl编写一些代码来测试数字并确定它们的所有数字是完全偶数还是完全奇数。
以下内容并未回答您的问题,但也许它会有所帮助:
use strict;
use warnings;
my $n = 2468;
my $c;
$c += $_ % 2 for split '', $n;
if ( !$c) {
print "$n has all even digits.\n";
}
elsif ( $c == length $n ) {
print "$n has all odd digits.\n";
}
else {
print "$n has a mixture of even and odd digits.\n";
}
split ''
将数字拆分为数字,$c += $_ % 2
每个都完成for
。 Even mod 2
会返回0
,因此如果$c
为零,则该数字只有偶数。 Odd mod 2
会返回1
,因此如果$c
与字符串$n
的长度相同,则数字只有奇数位。否则,该数字由偶数和奇数的混合组成。