如何在Perl中求一个数的平方?

4
我有一段代码,可以打印出前9个平方数:
#!/usr/local/bin/perl

for($i=1;$i<10 ;$i++ )
{
   printf $i^2 . "\n";
}

但出于某些原因,这只输出30167451011。如何正确地对一个数进行平方运算?

作为一行代码:perl -E 'say $_**2 for(1..9)' - kobame
1
我很高兴你得到了答案,但阅读文档是一种美德:perldoc perlopperldoc perltoc - Sinan Ünür
1
也就是 $i * $i - salva
6个回答

8

求平方需要使用 $i**2

#!/usr/local/bin/perl

for ( my $i = 1; $i < 10; $i++ ) {
    print $i**2 . "\n";
}

这将输出:
1
4
9
16
25
36
49
64
81

7
为了解释原始代码中发生的事情,您需要知道3件事:首先,^是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" 没有任何作用,所以所有结果都被打印出来时没有任何间隔。3016、... 变成了3016 ...


4

1
可以通过以下方式实现:

也可以这样做:

for (1..9) {
   print $_*$_,"\n"
}

输出:

1
4
9
16
25
36
49
64
81

1
foreach my $i (1..9){
   say $i**2;
}

0
您可以使用以下代码获取平方值。
print $_**2,"\n" for 1..10;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接