2011-05-17 89 views
1

我需要檢查一個數字是否是迴文數字,我開始考慮可能是實現它的最佳方法,將數字轉換爲字符串並驗證反向字符串是否相同。將字符串轉換爲數字並將其還原PHP

問題是,當我使用下面的代碼,我得到了錯誤的結果。

<?PHP 

function palindrome($number){ 
     $value = strval($number); 
     $reverse_value = strrev($value); 

     if($value == strrev($value)){ 
     echo " $number is a palindrome"; 
     echo gettype($value); 
     }else{ 
      echo "$number is not a palindrome"; 
      echo $value." ".strrev($value); 
     } 
} 

$number = 90209; 


palindrome($number); 
?> 

有人可以解釋我的不同嗎?

+0

你會得到什麼結果?當我運行這個,我得到:「90209是迴文」 – 2011-05-17 17:45:54

+0

你會得到什麼結果?我似乎正在使用您的代碼獲得正確的結果。 '90209是一個迴文'和'90219不是迴文' – Dutchie432 2011-05-17 17:46:36

+1

似乎爲我工作。我得到「90209是一個palindromestring」。 – 2011-05-17 17:46:37

回答

1

看來你有更深層次的問題,因爲我只是把這些代碼到IDE:

https://ideone.com/yJEz1

結果:90209 is a palindromestring

併成功推出了價值。你可能想檢查你的php.ini關於改變的數學設置,或者只是在不同的上下文中再次運行代碼,或者清除代碼中的重複,它可能會給你正確的結果。

這裏是使用(string)鑄造以確保字符串類型(我從來沒有使用strval()函數,我個人,我只是強制類型轉換)使用相同的代碼。它適用於所有三種測試用例。 https://ideone.com/4bI0O

0

它工作正常,雖然你根本沒有使用$ reverse_value。

if ($value == $reverse_value) 
{ 
    ... 

你的系統說$ value和$ reverse_value實際上是什麼?

0

這裏是一個優化版本的作品:

function is_palindrome($value) { 
    $reverse_value = strrev($value); 

    if ($value == $reverse_value) { 
     echo print_r($value, true) . "is a palindrome. The reverse is: " . print_r($reverse_value, true) . "<br />"; 
    } 
    else { 
     echo print_r($value, true) . "is a not a palindrome. The reverse is: " . print_r($reverse_value, true) . "<br />"; 
    } 
} 

沒有必要將該值轉換爲字符串;這會自動發生。此外,你的代碼調用strrev()兩次,所以我刪除了多餘的。