Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数学=>;PHP到Perl_Php_Perl_Math - Fatal编程技术网

数学=>;PHP到Perl

数学=>;PHP到Perl,php,perl,math,Php,Perl,Math,我是一名PHP开发人员,我想知道是否有人能帮我将这段代码转换成Perl脚本 我今天编写了以下PHP代码: <?php for ($i = 1; $i > $i++; $i++) { $cut = strlen($i)/2; $a = substr($i,0,$cut); $b = strrev($a); $som = $a + $b; if((strrev($a) == $b) && (strrev($som) == $s

我是一名PHP开发人员,我想知道是否有人能帮我将这段代码转换成Perl脚本

我今天编写了以下PHP代码:

<?php
for ($i = 1; $i > $i++; $i++) {
    $cut = strlen($i)/2;

    $a = substr($i,0,$cut);
    $b = strrev($a);

    $som = $a + $b;

    if((strrev($a) == $b) && (strrev($som) == $som) && ($a > 10000)) {
        echo $a . " + " . $b . " = " . $som . "\n";
    }       
}
?>

它的作用是:

如果你记住这个公式:$a+$b=$c基本上

  • 将$i减半,反转2st部分并存储为$b,将未反转的第一部分存储为$a
  • 将$a和$b添加到$c中,并检查$c是否反向等于$c
  • 输出“回文”,如下所示:

    1248+8421=9669

如果有人能帮我,我会很有帮助的:-)

非常感谢。

  • 使用
    length
    获取输入的长度
  • substr
    以剪切输入
  • reverse
    检查它是否是回文
  • 定义子例程中的功能
  • 避免使用
    $a
    $b
    作为变量名
  • 最好确保输入是数字
  • 使用严格;使用警告编码时


考虑到Zaids的建议和很少的思考,一些小的变化:

use strict;

for(my $i = 1;$i > 0;$i++)
{
    my $input = $i;
    my $firstHalf = substr($input,0,length($i)/2,'');
    my $sum = $firstHalf + $input;
    if(($firstHalf == reverse($input)) && (reverse($sum) == $sum) && ($firstHalf > 1000)) {
    print $firstHalf . " + " . $input . " = " . $sum . "\n";
    }
}

当使用
use warnings
时,我得到了一个关于添加的警告,我必须看看这个。

$I>$I++
?没想到会把这看成是有条件的…是的。。形成无限循环的奇怪方式。我应该解决这个问题。可能解决了重复问题。我们希望您至少尝试一下转换代码,并提供一个示例,说明您取得了多大进展。期望社区为您的客户完成转换是不公平的。谢谢。你的算法不正确。在这里查看正确的解决方案:非常感谢,这很有魅力!
use strict;

for(my $i = 1;$i > 0;$i++)
{
    my $input = $i;
    my $firstHalf = substr($input,0,length($i)/2,'');
    my $sum = $firstHalf + $input;
    if(($firstHalf == reverse($input)) && (reverse($sum) == $sum) && ($firstHalf > 1000)) {
    print $firstHalf . " + " . $input . " = " . $sum . "\n";
    }
}