如何在Perl中对数字进行平方?

1 perl loops

我有代码打印出前9个平方数字:

#!/usr/local/bin/perl

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

但出于某种原因,这只输出30167451011.我如何正确地对数字进行平方?

Bij*_*jan 6

要平方,你必须使用$ i**2

#!/usr/local/bin/perl

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

这将输出:

1
4
9
16
25
36
49
64
81
Run Code Online (Sandbox Code Playgroud)

  • `perldoc -f printf`:`当简单打印时,不要陷入使用printf的陷阱.打印效率更高,更不容易出错 (4认同)
  • 修复:)感谢您的提示 (2认同)

小智 6

为了解释原始代码中发生的事情,你需要知道3件事:首先,^是perl中的XOR运算符,因为它是C中的XOR运算符.

1 ^ 2 = 3
2 ^ 2 = 0
3 ^ 2 = 1
4 ^ 2 = 6
...
Run Code Online (Sandbox Code Playgroud)

其次,^运算符的优先级低于字符串连接运算符,.因此$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...