水仙花数(daffodil)

输出100~999中的所有水仙花数。若3位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数。例如153=1^3+5^3+3^3,所以153是水仙花数。 

#include <stdio.h>
//#include <stdlib.h>
//#include <stdbool.h> 
 
int cube ( const int n )
{
    return n * n * n;
}
 
bool isNarcissistic ( const int n )
{
    int hundreds = n / 100;
    int tens = (n / 10) % 10;//int tens = n / 10 - hundreds * 10;
    int ones = n % 10;
    return cube(hundreds) + cube(tens) + cube(ones) == n;
}
 
int main(void)
{
    int i;
    for ( i = 100; i < 1000; ++ i )
    {
        if ( isNarcissistic(i) )
            printf("%d\n", i );
    }
    return 0;//return EXIT_SUCCESS;

### Java 和 PHP 中水仙花的函实现 #### Java 实现水仙花算法 以下是基于 Java 的水仙花计算方法,该方法通过分解字并验证其是否满足条件来完成: ```java public class DaffodilNumber { public static boolean isDaffodil(int number) { int originalNumber = number; int sum = 0; while (number != 0) { int digit = number % 10; // 获取当前最后一位字 sum += Math.pow(digit, String.valueOf(originalNumber).length()); // 计算每一位的幂次方和 number /= 10; // 去掉最后一位继续处理下一位 } return sum == originalNumber; // 判断最终结果是否相等 } public static void findDaffodilsInRange(int start, int end) { for (int i = start; i <= end; i++) { if (isDaffodil(i)) { System.out.println(i); // 输出符合条件的水仙花 } } } public static void main(String[] args) { findDaffodilsInRange(10, 100000); // 查找范围内的所有水仙花 } } ``` 上述代码实现了两个功能:`isDaffodil()` 方法用于检测单个整是否为水仙花;而 `findDaffodilsInRange()` 方法则遍历指定范围内所有的可能候选者,并调用前者逐一检验。 --- #### PHP 实现水仙花算法 对于 PHP 来说,也可以采用类似的逻辑结构来进行水仙花的判定。下面是一个简单的例子: ```php <?php function is_daffodil($num) { $originalNum = $num; $sum = 0; $digitsCount = strlen((string)$num); while ($num > 0) { $digit = $num % 10; // 取出最低位上的值 $sum += pow($digit, $digitsCount); $num = intval($num / 10); // 移除最低位 } return $sum === $originalNum; // 验证总和是否等于原 } function find_daffodils_in_range($start, $end) { for ($i = $start; $i <= $end; $i++) { if (is_daffodil($i)) { echo "$i\n"; // 打印找到的结果 } } } // 调用函寻找特定区间中的所有水仙花 find_daffodils_in_range(10, 100000); ?> ``` 此脚本同样包含了两种核心操作——一是单独测试某个给定值是否属于水仙花类别 (`is_daffodil`) ,二是扫描整个区间的潜在匹配项 (`find_daffodils_in_range`) 。两者的原理均依赖于逐一分解目标字及其组成部分再加以比较得出结论[^2]。 --- ### 总结说明 无论是哪种编程语言,在解决此类问题时都需要遵循基本的原则即提取每位独立成分之后依据定义运算规则累加起来看能否还原成原始输入据。这里展示出来的解决方案不仅限定了具体的搜索边界还提供了灵活调整参的能力以便适应不同场景需求[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值