ошибка в коде php armstrong - PullRequest
       0

ошибка в коде php armstrong

0 голосов
/ 19 декабря 2011

Я только начинающий в 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 ]

2 голосов
/ 19 декабря 2011

Учитывая определение Армстронга Чисел , функциональное решение является более кратким и немного более понятным для меня

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;
}

Оказывается, что предыдущее определение было верным для числа трехцифры. общее определение приводит к незначительной другой функции:

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 голос
/ 22 августа 2018
$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';

}
1 голос
/ 19 декабря 2011

Вы меняете $n внутри цикла и используете его для сравнения ($d==$n) и вывода впоследствии.Сделайте копию значения $n и используйте ее вместо этого в цикле.

Примечание: Ваш цикл должен проверять на $n>0 вместо $n>1.

0 голосов
/ 08 февраля 2018

Программа, которую вы разместили в вопросе, выглядит так, как будто она переведена с языка 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.Для более старых версий можно использовать функцию pow().

0 голосов
/ 08 февраля 2018

Вы можете проверить, является ли любое число сильным или нет

<?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>
0 голосов
/ 11 августа 2017
$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";
}
0 голосов
/ 19 декабря 2011
<?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 */
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...