水仙花数 C 语言程序代码

2026-10-02 18:17:20 200阅读
水仙花数是指一个三位数,其各位数字的立方和等于该数本身,下面用C语言实现:遍历100到999,拆分出百位、十位、个位,计算立方和并与原数比较,相等则输出,结果为153、370、371、407,核心代码为:`#include int main(){int i,a,b,c;for(i=100;i

《C语言实现水仙花数的判断与求解(附完整代码)》

水仙花数(Narcissistic number)又称自恋数、阿姆斯特朗数,是指一个 n 位正整数,其各位数字的 n 次方之和等于该数本身,153 是一个三位数,1³ + 5³ + 3³ = 153,153 是水仙花数。

水仙花数 C 语言程序代码

三位水仙花数共有 4 个:153、370、371、407,下面介绍如何用 C 语言程序判断一个数是否为水仙花数,并输出所有三位水仙花数。

判断一个数是否为水仙花数

程序设计思路:

  1. 计算该整数的位数 n;
  2. 依次取出每一位数字;
  3. 计算每一位数字的 n 次幂并累加;
  4. 判断累加和是否等于原数。

完整代码如下:

// 计算 base 的 exp 次幂
int power(int base, int exp) {
    int res = 1;
    for (int i = 0; i < exp; i++) {
        res *= base;
    }
    return res;
}
// 判断是否为水仙花数
int isNarcissistic(int num) {
    int temp = num;
    int n = 0;
    int sum = 0;
    // 计算位数
    while (temp != 0) {
        temp /= 10;
        n++;
    }
    temp = num;
    // 计算各位数字的 n 次幂之和
    while (temp != 0) {
        int digit = temp % 10;
        sum += power(digit, n);
        temp /= 10;
    }
    return sum == num;
}
int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    if (isNarcissistic(num)) {
        printf("%d 是水仙花数\n", num);
    } else {
        printf("%d 不是水仙花数\n", num);
    }
    return 0;
}

输出所有三位水仙花数

要输出 100 到 999 之间的所有水仙花数,可以直接遍历这个范围,判断每个数是否满足条件,由于三位数的位数固定为 3,因此每一位数字的 3 次幂之和等于原数即可。

代码如下:

// 计算 base 的 exp 次幂
int power(int base, int exp) {
    int res = 1;
    for (int i = 0; i < exp; i++) {
        res *= base;
    }
    return res;
}
int main() {
    printf("三位水仙花数有:");
    for (int num = 100; num <= 999; num++) {
        int sum = 0;
        int temp = num;
        while (temp != 0) {
            int digit = temp % 10;
            sum += power(digit, 3);
            temp /= 10;
        }
        if (sum == num) {
            printf("%d ", num);
        }
    }
    printf("\n");
    return 0;
}

运行结果为:

三位水仙花数有:153 370 371 407

C 语言实现水仙花数的关键在于:

  • 位数的计算;
  • 数字的逐位拆分;
  • 幂运算的累加判断。

使用自定义的整数幂函数可以避免浮点数误差,掌握了基本思路后,还可以尝试扩展到任意位数的水仙花数求解。

文章版权声明:除非注明,否则均为安好网原创文章,转载或复制请以超链接形式并注明出处。