在php中反向打印数字时出现的问题

在php中反向打印数字时出现的问题,php,Php,可能重复: 我只是php的初学者。我试着写一个程序,把给定的数字反写出来。例如,如果我使用123作为输入,结果应该是321。我尝试了以下代码。它很好用。但如果给定输入为0123,则输出为38。我无法纠正它。如何更正代码?这是我的密码 <?php $n=123; $b=0; while($n>=1) { $b=$b*10+$n%10; $n=$n/10; } echo $b; ?> 您可以使用以下内容: <?php $rprint = function

可能重复:

我只是php的初学者。我试着写一个程序,把给定的数字反写出来。例如,如果我使用123作为输入,结果应该是321。我尝试了以下代码。它很好用。但如果给定输入为0123,则输出为38。我无法纠正它。如何更正代码?这是我的密码

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

您可以使用以下内容:

<?php

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

$rprint(12364);
?>

编辑1:

或者你可以用字符串代替数字。我想已经有人建议过了


(我有点脱离主题)

当你在数字的开头添加一个
0
时,PHP将数字视为八进制


八进制123是十进制83,它正确地变为38。

我认为你的数学问题。在乘数和mod周围应该有括号

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


只需使用PHP的动态特性,而不必太在意数字和字符串之间的差异:

echo strrev(123);

是的,这是因为以0开头的数字在基数8中被考虑,所以0123在基数10中实际上是83


因此,您的算法对于整数是正确的-如果希望0123的还原为3210,您可以简单地将其还原为字符串,并且只需使用函数

在php中,带前导零的整数始终被视为八进制。因此,只需将其设置为字符串,并使用内置php函数strev()

如果在代码中使用
0123
,则为时已晚(请参阅链接)。您应该使用字符串来“反转”数字。这也允许更简单的方法。对于OP:Anonymous函数,从PHP5.3.0开始就可以使用。谢谢您的解释。我用strev函数代替我的代码,我的问题已经解决了。
*
%
的优先级都高于
+
,因此无需使用括号分组(尽管它可以使其更具可读性):