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


issue in reversly printing a number in php

可能的重复项:
前导零对 php int 有什么作用?

我只是 php 的初学者。我试图编写程序来打印给定的数字作为反向。例如,如果我使用 123 作为输入,结果应该是 321。我尝试了以下代码。它工作正常。但是,如果给定的输入是0123,则输出为38。我无法纠正它。如何更正我的代码?这是我的代码。

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

数字的开头添加0时,PHP 会将该数字视为八进制。

八进制 123 是十进制 83,正确更改为 38。

只需使用 PHP 的动态特性 不太关心数字和字符串之间的区别:

echo strrev(123);

http://www.php.net/manual/en/function.strrev.php

是的,这是因为以 0 开头的数字以 8 为基数,因此 0123 实际上是以 10 为基数的 83。

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

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

<?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

你可以使用这样的东西:

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

编辑 1:

或者您可以使用字符串而不是数字。我想已经有人建议了。

(我有点偏离主题(

PHP 中,带有前导零的整数始终被视为八进制。所以只需将其制作为字符串并使用 buitin php 函数 strrev((