2011-12-21 32 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()