可能的重复项:
前导零对 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((