>백엔드 개발 >PHP 튜토리얼 >PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.

PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.

青灯夜游
青灯夜游원래의
2021-08-16 11:39:167386검색

이전 글 "PHP 루프 학습 9: 주어진 두 숫자 사이의 최대 공약수 얻기"에서 PHP 프로그램 Number에서 주어진 두 정수 사이의 최대 공약수를 찾기 위해 while 루프 문을 사용하는 방법을 소개했습니다. , PHP 루프에 대해 계속 배워봅시다~

이 글에서는 주로 세 자리 정수가 주어졌을 때 그 숫자가 수선화인지 판별하는 방법을 보여줍니다. 그런 다음 총 수선화 수를 출력하는 방법입니다.

우선 살펴볼까요수선화수란 무엇인가요?

수선화 숫자는 3자리 숫자이며, 각 숫자의 3제곱의 합은 그 자체와 같습니다(예: 1^3 + 5^3+ 3^3 = 153).

먼저 주어진 세 자리 숫자가 수선화인지 판별하는 방법을 살펴보겠습니다.

사고 분석:

위에 따르면 우리는 다음을 알고 있습니다. 숫자 $num가 수선화 수라면 다음을 충족해야 합니다. 1의 3승 + 십의 자리 3승 + 백의 3승 = $num 자체$num要是水仙花数,那么它要满足: 个位的3次方+十位的3次方+百位的3次方= $num本身

那么我们可以先分解$num,得到个位$g、十位$s、百位$b

然后判断  $g^3 + $^3 +$b^3 是不是等于$num

下面看看实现代码:

<?php
header("Content-type:text/html;charset=utf-8");
function is_narcissistic ( $num ){
	$b= intval($num/100);
	$s= ($num/10)%10;
	$g= $num%10;
	
//	if($b*$b*$b+$s*$s*$s+$g*$g*$g==$num){  等价于 
	if(pow($b,3)+pow($s,3)+pow($g,3)==$num){
		echo $num."是水仙花数<br>";
	}else{
		echo $num."不是水仙花数<br>";
	}
}
is_narcissistic(153);
is_narcissistic(152);
?>

输出结果:

PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.

上例中pow($b,3)$b*$b*$b是等价的,都可以计算$b的三次方($b^3)。pow(x,y)函数可以返回 x 的 y 次方,即x^y

我们知道水仙花数是一个 3 位数,则它是有定额的,那么如何计算并输出所有的水仙花数呢?这就需要使用循环了。

可以利用for循环来限定范围在100~1000之间,写法:

<?php
header("Content-type:text/html;charset=utf-8");
$i=0;
for ( $num = 100; $num < 1000; $num++){
	$b= intval($num/100);
	$s= ($num/10)%10;
	$g= $num%10;
	
	if(pow($b,3)+pow($s,3)+pow($g,3)==$num){
		echo $num."<br>";
		$i++;
	}
}
echo "水仙花数共有 $i 个";
?>

看看输出结果:

PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.

除了上面计算并输出所有水仙花数的方法,还可以使用3个for循环遍历每一位来输出所有水仙花数:

<?php
header("Content-type:text/html;charset=utf-8");
$i=0;
for($q=1;$q<=9;$q++){
    for($w=0;$w<=9;$w++){
      for($e=0;$e<=9;$e++){
        if($q*$q*$q + $w*$w*$w + $e*$e*$e ==
         100*$q + 10*$w + $e){
           echo "$q $w $e "."<p>";
		   $i++;
        }
      }
    }
}
echo "水仙花数共有 $i 个";
?>

看看输出结果:

PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.

可以看出,输出结果是一样的。

可以看出,我们在for循环的循环体中,使用一个计数器$num

그러면 먼저 $num를 분해하여 일의 자리 $g, 십을 얻을 수 있습니다. 숫자 $s, 백 자리 $b

그런 다음 $g^3 + $^3 +$b^3 가 같은지 확인합니다. to $num

구현 코드를 살펴보겠습니다: 🎜rrreee🎜출력 결과: 🎜🎜PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.🎜🎜위의 예에서 pow($b,3)$ b*$b*$b는 동일하며 $b($b^3)의 세제곱을 계산할 수 있습니다. pow(x,y) 함수는 x의 y제곱, 즉 x^y를 반환할 수 있습니다. 🎜🎜우리는 수선화 숫자가 3자리 숫자라는 것을 알고 있으므로 할당량이 있습니다. 그렇다면 모든 수선화 숫자를 어떻게 계산하고 출력할까요? 이를 위해서는 루프를 사용해야 합니다. 🎜🎜for 루프를 사용하여 범위를 100에서 1000 사이로 제한할 수 있습니다. 작성 방법: 🎜rrreee🎜출력 결과 보기: 🎜🎜PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.🎜🎜모든 수선화 수를 계산하고 출력하는 위의 방법 외에도 3개의 for 루프를 사용할 수도 있습니다. 각 숫자를 탐색하여 출력합니다. 모든 수선화의 수: 🎜rrreee🎜출력을 살펴보세요: 🎜🎜PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.🎜🎜출력 결과가 동일함을 알 수 있습니다. 🎜🎜for 루프의 루프 본문에 카운터 $num를 사용한 것을 볼 수 있는데, 매번 세 자리 회문 숫자를 출력한 후 1씩 증가하여 100이 될 수 있습니다. ~999 안에는 몇 개의 회문이 있습니까? 🎜🎜그렇습니다. 더 알고 싶다면 여기를 클릭하세요. → →🎜php 비디오 튜토리얼🎜🎜

위 내용은 PHP 루프 학습 10: 수선화의 수를 확인하고 모든 수선화의 수를 출력합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.