2011-09-11 5 views
0

私はPHP開発者です。誰かがこのコードをPerlスクリプトに変換するのを手伝ってくれるかどうかは疑問でした。数学=> 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を半分にカットし、2番目の部分を反転して$ bに格納し、最初の部分を$ aに格納します。
  • $ aと$ bを$ cに追加し、$ cが$ cに等しいかどうかを逆にチェックします。
  • 出力 '回文'、このように見える:誰もが:-)

    私を助けることができれば、私は非常に役立つだろう

    = 9669

    1248 + 8421

アバンスで感謝します。

+0

'$ i> $ i ++'?条件付きとしてそれを見ることは決して期待されていません... – Zaid

+0

ええと、無限ループを作るための奇妙な方法。私はそれを修正する必要があります。おそらく重複した問題を解決します。 – Melvin

+0

コードを変換する際に、少なくともあなたはどれくらいの距離を持っているかの例を提供することが必要です。あなたのために完全な変換を行うことを期待することは、コミュニティにとって不公正です。ありがとう。 – Kev

答えて

1

コーディング:

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を使用してこの。

+0

ありがとう、これは魅力のように機能します! – Melvin

1
  • 使用lengthチェックするために入力
  • reverseをカットする入力
  • substrの長さを取得することが回文
  • かどう$aの使用は避けてくださいサブルーチン
  • で機能を定義し、 $bを変数名として
  • 入力が数字であることを確認することをお勧めします
  • use strict; use warnings; Zaidsのアドバイスと少し思考、いくつかの小さな変更を考慮

use strict; 
use warnings; 
use Scalar::Util 'looks_like_number'; 

sub is_modified_palindrome { 

    my $input = shift; 

    # Test input numericness 
    warn("Input '$input' non-numeric"), return unless looks_like_number $input; 

    my $cutIndex = length($input)/2;     # Don't worry about int-ing it 
    my $firstHalf = substr $input, 0, $cutIndex, ''; # $input contains second half 

    my $result = $firstHalf + $input; 

    return $result = reverse $result;     # Returns true or false 
} 
+0

ありがとう! – Melvin