我有代码打印出前9个平方数字:
#!/usr/local/bin/perl
for($i=1;$i<10 ;$i++ )
{
printf $i^2 . "\n";
}
但由于某种原因,这只输出30167451011.我如何正确地对数字进行平方?
答案 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"
根本没有任何效果,因此所有结果都打印在它们之间。 3
,0
,1
,6
,...已成为3016
...
答案 2 :(得分:3)
要对数字求平方,您需要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