网站建设与设计实验报告,网络建设与维护是什么工作,用阿里云怎么建网站,备案图标怎么放在网站中目录
编辑
----------------------------------------begin--------------------------------------
一、什么是水仙花数#xff1f;
二、问题分析
确定数字的位数#xff1a;计算输入数字的位数 n。
分离每一位数字#xff1a;例如将 153 分离为 1、5、3。
计算各…
目录
编辑
----------------------------------------begin--------------------------------------
一、什么是水仙花数
二、问题分析
确定数字的位数计算输入数字的位数 n。
分离每一位数字例如将 153 分离为 1、5、3。
计算各位的n次方和将每一位的 n 次方相加。
判断是否相等比较和与原数是否相等。
三、算法设计
计算位数
分离每一位
计算次方和
判断逻辑
四、代码实现
完整代码
代码解析
五、运行结果 六、关键问题与优化
为什么从100开始遍历
如何处理更大的数字
手动实现幂运算避免依赖 math.h 七、总结
路过的佬们点点关注哦~
你们的鼓励是我前进的动力~
----------------------------------------------end------------------------------------------ ----------------------------------------begin--------------------------------------
一、什么是水仙花数
水仙花数Narcissistic Number又称阿姆斯特朗数是指一个 n 位数的正整数其各位数字的 n 次方之和等于它本身。例如 153 是3位水仙花数135333153135333153 9474 是4位水仙花数944474449474944474449474 二、问题分析
要实现水仙花数的判断需要解决以下问题 确定数字的位数计算输入数字的位数 n。 分离每一位数字例如将 153 分离为 1、5、3。 计算各位的n次方和将每一位的 n 次方相加。 判断是否相等比较和与原数是否相等。 三、算法设计 计算位数 通过循环除以10统计次数直到数字变为0。 分离每一位 使用取模% 10获取最后一位再通过整除/ 10移除该位。 计算次方和 调用 math.h 中的 pow 函数或手动实现幂运算。 判断逻辑 如果次方和等于原数则为水仙花数。
四、代码实现 完整代码
#include stdio.h
#include math.hint isNarcissistic(int number) {int original number;int sum 0;int digits 0;int temp number;// 计算位数while (temp ! 0) {temp / 10;digits;}// 恢复原始值temp original;// 计算各位的次方和while (temp ! 0) {int remainder temp % 10;sum pow(remainder, digits);temp / 10;}// 判断是否相等return (sum original);
}int main() {int lower 100; // 水仙花数至少是三位数int upper 9999; // 示例范围扩大到四位数printf(水仙花数%d - %d:\n, lower, upper);for (int i lower; i upper; i) {if (isNarcissistic(i)) {printf(%d\n, i);}}return 0;
} 代码解析 isNarcissistic函数 计算位数通过 while 循环统计除以10的次数。 分离各位数字通过 % 10 取余和 / 10 整除操作。 次方和计算使用 pow(remainder, digits) 计算每位数字的 n 次方。 main函数 遍历指定范围如100-9999内的所有数字。 调用 isNarcissistic 判断是否为水仙花数并输出。 五、运行结果
水仙花数100 - 9999:
153
370
371
407
1634
8208
9474 六、关键问题与优化 为什么从100开始遍历 水仙花数至少是三位数如153两位数无法满足条件。 如何处理更大的数字 调整 upper 的值即可但需注意数据溢出问题int 类型上限约为 231−1231−1。 手动实现幂运算避免依赖 math.h
int power(int base, int exponent) {int result 1;for (int i 0; i exponent; i) {result * base;}return result;
} 七、总结
通过本博客你学会了 水仙花数的定义与数学原理。 分步骤算法设计计算位数、分离数字、次方求和。 C语言实现技巧循环、条件判断、函数封装。 扩展思路如何优化代码、处理更大范围的数字。 动手挑战尝试修改代码找出所有5位水仙花数如54748并在评论区分享你的结果 路过的佬们点点关注哦~
你们的鼓励是我前进的动力~ ----------------------------------------------end------------------------------------------