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

时间:2014-09-30 23:00:01

标签: perl loops

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

#!/usr/local/bin/perl

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

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

5 个答案:

答案 0 :(得分:6)

To square you have to use $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

答案 1 :(得分:6)

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

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 ...

答案 2 :(得分:3)

^Bitwise Or operator

要对数字求平方,您需要Exponentiation operator **

for my $i ( 1 .. 9 ) {
    print $i**2, "\n";
}

输出:

1
4
9
16
25
36
49
64
81

答案 3 :(得分:1)

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

答案 4 :(得分:1)

也可以这样做:

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

输出:

1
4
9
16
25
36
49
64
81