在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函数代替我的代码,我的问题已经解决了。*
和%
的优先级都高于+
,因此无需使用括号分组(尽管它可以使其更具可读性):