水仙花数(Narcissistic Number),又称阿姆斯特朗数,是指一个 n 位数的正整数,其各位数字的 n 次方之和等于它本身。例如:
要实现水仙花数的判断,需要解决以下问题:
n。
153 分离为 1、5、3。
n 次方相加。
% 10)获取最后一位,再通过整除(/ 10)移除该位。
math.h 中的 pow 函数,或手动实现幂运算。
#include <stdio.h>
#include <math.h>
int 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函数:
isNarcissistic 判断是否为水仙花数并输出。
水仙花数(100 - 9999):
153
370
371
407
1634
8208
9474upper 的值即可,但需注意数据溢出问题(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;
}通过本博客,你学会了:
动手挑战:尝试修改代码,找出所有5位水仙花数(如54748),并在评论区分享你的结果!