我只是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";
?>
答案 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>