我有一段代码,可以打印出前9个平方数:
但出于某些原因,这只输出30167451011。如何正确地对一个数进行平方运算?
#!/usr/local/bin/perl
for($i=1;$i<10 ;$i++ )
{
printf $i^2 . "\n";
}
但出于某些原因,这只输出30167451011。如何正确地对一个数进行平方运算?
#!/usr/local/bin/perl
for ( my $i = 1; $i < 10; $i++ ) {
print $i**2 . "\n";
}
1
4
9
16
25
36
49
64
81
^
是perl中的异或运算符,因为它是C中的异或运算符。1 ^ 2 = 3
2 ^ 2 = 0
3 ^ 2 = 1
4 ^ 2 = 6
...
其次,^
运算符的优先级低于字符串连接运算符 .
因此,$i^2 . "\n"
等同于 $i ^ (2 . "\n")
第三,Perl会根据需要在字符串和数字之间进行转换。 .
运算符需要两边都是字符串,因此将 2
转换为 "2"
并与 "\n"
连接成字符串 "2\n"
。
然后,^
运算符需要两边都是数字,因此将字符串 "2\n"
转换为数字-通过获取前导数字部分并丢弃其余部分来实现。 因此,$i ^ 2 . "\n"
的结果最终与 $i ^ 2
相同。你的 "\n"
没有任何作用,所以所有结果都被打印出来时没有任何间隔。3
、0
、1
、6
、... 变成了3016
...
也可以这样做:
for (1..9) {
print $_*$_,"\n"
}
输出:
1
4
9
16
25
36
49
64
81
foreach my $i (1..9){
say $i**2;
}
print $_**2,"\n" for 1..10;
perl -E 'say $_**2 for(1..9)'
- kobameperldoc perlop
,perldoc perltoc
。 - Sinan Ünür$i * $i
。 - salva