2011-12-21 50 views
1

可能重複:
What does a leading zero do for a php int?問題reversly印刷數量在PHP

我只是在PHP初學者。我試圖編寫程序來打印給定的數字。例如,如果我使用123作爲輸入結果應該是321.我嘗試了下面的代碼。它工作正常。但是,如果給定的輸入是0123,那麼輸出是38.我無法糾正它。我如何糾正我的代碼?這是我的代碼。

<?php 
$n=123; 
$b=0; 
while($n>=1) 
{ 
    $b=$b*10+$n%10; 
    $n=$n/10; 
} 
echo $b; 
?> 
+1

如果在代碼中使用了'0123',則已經太晚了(請參閱鏈接)。您應該使用字符串來「倒轉」數字。這也允許更簡單的方法。 – mario 2011-12-21 04:22:21

回答

0

是的,這是因爲使用的數字從0開始考慮在基數8中,所以0123實際上是基數10中的83.

所以,你的算法是整數正確的 - 如果你想的0123的復歸是3210,你可以簡單地恢復它作爲一個字符串,你可以簡單地使用strrev功能

+1

感謝您的解釋。我使用strrev函數而不是我的代碼,我的問題已解決。 – designersvsoft 2011-12-21 04:36:51

0

你可以使用這樣的事情:

<?php 

$rprint = function ($nr) use (&$rprint) 
{ 
    echo $nr%10; 
    if($nr > 10) 
    { 
     $rprint($nr/10); 
    } 
}; 

$rprint(12364); 
?> 

編輯1:

或者你可以使用字符串而非數字。正如我想的那樣已經有人建議了。

(我是有點的科目)

+0

到OP:匿名函數自PHP 5.3.0起可用。 – yoda 2011-12-21 04:23:38

2

當您添加0到你的電話號碼的開頭,PHP把數量爲八進制。

八進制123是十進制的83,其正確地更改到38

0

我覺得你的數學問題。你應該在乘數和mod周圍加括號。

<?php 
$num=6541020; 
$revnum=0; 
do{ 
    $revnum=($revnum *10)+($num % 10); 
    $num=(int)($num/10); 
}while($num>0); 
echo $revnum; 
?> 

http://www.weberdev.com/get_example.php3?ExampleID=4879

+0

沒有。 '*'和'%'的優先級高於'+',因此不需要用括號進行分組(儘管它可以使其更具可讀性):[Operator Precedence](http://php.net/manual/en /language.operators.precedence.php) – ircmaxell 2012-08-13 12:04:42

0

的整數與領先的零在PHP中總是被視爲八進制。因此,只需將它作爲字符串並使用buitin php函數strrev()