php armstrong代码中的错误

时间:2011-12-19 09:28:44

标签: php math

我只是php的初学者。我曾试图为阿姆斯特朗号码编写代码。我已经检查了我的代码153.我的代码输出是0.153不是一个非常强的数字。我怎么能纠正它?这是我的代码。

<?php
$n=153;
while($n>1)
{
    $b=$n%10;
    $c=$b*$b*$b;
    $n=$n/10;
    $d=$c+$d;
}
if($d==$n)
    echo $n."is an armstrong number";
else
    echo $n."is not an armstrong number";
?>

7 个答案:

答案 0 :(得分:2)

鉴于Armstrong Numbers definition,功能性解决方案对我来说更简洁,更清晰

function isArmstrongNumber($number) {
    $digits=str_split($number); // create an array containing the digit into the
    $result = array_sum(
        array_map(
            function($x){return $x*$x*$x;},
            $digit
        )
    );
    return $number == $result;
}

事实证明,之前的定义对三位数有效。 一个general definition导致一个 功能略有不同:

function isArmstrongNumber($number) {
    $digits=str_split($number); // create an array containing the single digits
    $power= count($digits);     // the power every digit has to be raised to
    $result = array_sum(
        array_map('pow', $digits, array_fill(0,$power,$power))
    );
    return $number == $result;
}

您可以这样使用代码:

$candidate = 153;
if(isArmstrongNumber($candidate) {
    /* armstrong number */
    echo $candidate, ' is an Armstrong number.';
} else {
    /* not armstrong number */
    echo $candidate, ' is not an Armstrong number.';
}

答案 1 :(得分:1)

您正在更改循环中的$n并将其用于比较($d==$n)并在之后输出。复制$n的值并在循环中使用它。

备注:您的循环应该测试$n>0而不是$n>1

答案 2 :(得分:1)

$n=407;
 $x =(string)$n;
 for($i=0;$i<strlen($x);$i++)
 { 
    $num+=$x[$i]*$x[$i]*$x[$i];


 }
if($n==$num){
  echo $num.'is a palindrome';
}else{
  echo $num.'is Not a palindrome';

}

答案 3 :(得分:0)

<?php
$n = 153;
$tempN = $n;

while($tempN > 0) {
    $remainder = $tempN % 10;
    $sum = $sum + $remainder * $remainder * $remainder;
    $tempN = $tempN / 10;
}

if($n == $sum) {
    /* armstrong number */
} else {
    /* not armstrong number */
}
?>

答案 4 :(得分:0)

$num    = 371;
$sum    = 0;
$temp   = $num;
while($temp!= 0){
    $rem    =   $temp%10;
    $sum    =   $sum+($rem*$rem*$rem); 
    $temp   =   $temp/10;

}
if($num == $sum){
   echo "Armstrong number"; 
}
else{
   echo  "not an armstrong number";
}

答案 5 :(得分:0)

您在问题中发布的程序看起来像是从C语言翻译过来的.PHP提供了使用字符串和数组的简单方法;它们可用于将数字拆分为数字并对每个数字应用转换。

这就是PHP解决方案的样子:

function isArmstrongNumber($number)
{
    // The power is not always 3 but the number of digits of the number
    $power = strlen($number);

    // Compute the sum of values returned by array_map()
    $sum = array_sum(
        array_map(
            // Apply this function to each digit
            function ($digit) use ($power) {
                // Compute $digit to the power of $power
                return $digit ** $power;
            },
            // Split the number into digits
            str_split($number)
        )
    );

    return $sum === $number;
}

自PHP 5.6起,exponentiator operator (**)可用。对于旧版本,可以使用pow()函数。

答案 6 :(得分:-1)

您可以检查是否有任何数字

<?php
if(isset($_POST['log']))
{
    echo $limit=$_POST['limit'];
    amstrong_checker($limit);
}
function amstrong_checker($val){// $val take value from user.
  $value=$val; 
  $counter=0; 
  $amstrong=0;
  while($val >= 1){
    $digit[$counter]=$val%10;
    $val = $val/10;
    $counter=$counter+1; //count the digits of a value.
  }
  for($i=0 ; $i<$counter ; $i++){
    $data=1;
    for($j=0 ; $j<$counter ; $j++){
      $data=$data * $digit[$i]; //calculate according to digits count.
    }
    $amstrong=$amstrong+$data;//calculate sum of total. 
  }
  if($amstrong==$value){ //checking.
    echo 'amstrong number';
  }
  else{
    echo 'not a amstrong number';
  }
}
?>

<!doctype html>
<html>
<body>
<body>
 <form method="post" >
<table border="0">
  <tbody>
    <tr>
      <td>limit</td>
       <td><input type="text" name="limit"></td>
    </tr>
    <tr>
      <td><input name="log" type="submit"  value="submit"></td>
    </tr>
  </tbody>
</table>

</body>
</html>