水仙花数php代码
水仙花数是指一个n位数,它的每个位上的数字的n次幂之和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。
php<?php
function isNarcissistic($number) {
$numDigits = strlen((string)$number);
$sum = 0;
$temp = $number;
while ($temp != 0) {
$digit = $temp % 10;
$sum += pow($digit, $numDigits);
$temp = (int)($temp / 10);
}
return $sum == $number;
}
function findNarcissisticNumbers($min, $max) {
$narcissisticNumbers = array();
for ($i = $min; $i <= $max; $i++) {
if (isNarcissistic($i)) {
array_push($narcissisticNumbers, $i);
}
}
return $narcissisticNumbers;
}
$min = 100; // 最小的三位数
$max = 999; // 最大的三位数
$narcissisticNumbers = findNarcissisticNumbers($min, $max);
echo "水仙花数列表:\n";
foreach ($narcissisticNumbers as $num) {
echo $num . "\n";
}
?>
这段代码首先定义了一个isNarcissistic
函数,用于检查一个数字是否是水仙花数。然后定义了一个findNarcissisticNumbers
函数,用于找到指定范围内的所有水仙花数。最后,通过调用findNarcissisticNumbers
函数,并指定最小和最大的三位数范围,打印出了找到的所有水仙花数。
如果您希望
性能优化: 当查找更大范围的水仙花数时,可以优化算法以提高性能。例如,可以跳过一些不必要的数字,比如排除那些明显不是水仙花数的数字。
用户输入: 让用户输入最小和最大范围,而不是在代码中硬编码这些值,这样用户可以自定义查找范围。
错误处理: 添加输入验证和错误处理机制,以确保用户输入的是有效范围,并提供友好的错误提示。
更多输出选项: 除了简单地打印出水仙花数列表,还可以考虑其他输出选项,例如将结果以更友好的格式显示,或者将结果保存到文件中。
函数封装: 如果您计划在其他项目中多次使用这些功能,可以将它们封装成类或库,以便在其他地方轻松重用。
php<?php
function isNarcissistic($number) {
$numDigits = strlen((string)$number);
$sum = 0;
$temp = $number;
while ($temp != 0) {
$digit = $temp % 10;
$sum += pow($digit, $numDigits);
$temp = (int)($temp / 10);
}
return $sum == $number;
}
function findNarcissisticNumbers($min, $max) {
$narcissisticNumbers = array();
for ($i = $min; $i <= $max; $i++) {
if (isNarcissistic($i)) {
array_push($narcissisticNumbers, $i);
}
}
return $narcissisticNumbers;
}
function printNarcissisticNumbers($narcissisticNumbers) {
echo "水仙花数列表:\n";
foreach ($narcissisticNumbers as $num) {
echo $num . "\n";
}
}
// 输入验证
if (isset($argv[1]) && isset($argv[2]) && is_numeric($argv[1]) && is_numeric($argv[2])) {
$min = (int)$argv[1];
$max = (int)$argv[2];
if ($min >= 100 && $max <= 999 && $min <= $max) {
$narcissisticNumbers = findNarcissisticNumbers($min, $max);
printNarcissisticNumbers($narcissisticNumbers);
} else {
echo "请输入有效的三位数范围。\n";
}
} else {
echo "用法:php narcissistic.php <最小值> <最大值>\n";
}
?>
这个改进后的代码增加了输入验证和错误处理,让用户可以在命令行中指定最小和最大值。