2011-09-11 54 views
0

我是一名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) == $som) && ($a > 10000)) { 
     echo $a . " + " . $b . " = " . $som . "\n"; 
    }  
} 
?> 

作用:

如果你把這個公式記:$ A + $ B = $ C,它基本上

  • 將$ i削減一半,將第2部分倒轉並存入$ b,並將第1部分倒轉到$ a中。
  • 將$ a和$ b添加到$ c中,並檢查$ c是否等於$ c。
  • 輸出 '迴文',看起來像這樣:

    1248 + 8421 = 9669

我會非常有益的,如果有人可以幫助我走出:-)

非常感謝。

+0

'$ i> $ i ++'?從來沒有料到這是一個有條件的... – Zaid

+0

是的..奇怪的方式來做一個無限循環。我應該解決這個問題。可能解決重複的問題。 – Melvin

+0

我們希望您至少能夠在轉換您的代碼時提供一些幫助,並提供一個您得到多遠的示例。期望它爲您的網站做完整的轉換,這對社區是不公平的。謝謝。 – Kev

回答

1

時考慮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我得到了另外一個警告,一定要看這個。

+0

非常感謝,這個作品很有魅力! – Melvin

1
  • 使用length獲得輸入的長度
  • substr削減輸入
  • reverse來檢查它是否是一個迴文
  • 在一個子程序定義功能
  • 避免使用$a$b作爲變量名稱
  • 確保輸入數字是個好主意
  • use strict; use warnings;編碼

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