C语言——多种方式打印出1000之内的所有的“水仙花数”

        所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数,它的每个位上的数字的立方和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。

方法一

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
int main() 
{
    int i, j, k, num;
    // 循环遍历所有的3位数
    for (i = 1; i <= 9; i++) 
	{
        for (j = 0; j <= 9; j++) 
		{
            for (k = 0; k <= 9; k++) 
			{
                num = i * 100 + j * 10 + k;
                // 判断是否为水仙花数并打印
                if (num == i*i*i + j*j*j + k*k*k) 
				{
                    printf("%d\n", num);
                }
            }
        }
    }
    return 0;
}

        这个程序通过三个嵌套的循环遍历所有的3位数,并检查它们是否满足水仙花数的条件。如果一个数满足条件,它就会被打印出来。

方法二 

#include <stdio.h>

int main() {
    int num, digit, sum;
    printf("水仙花数:\n");
    for (num = 100; num <= 999; num++) 
    {
        sum = 0;
        int temp = num;
        while (temp != 0) 
        {
            digit = temp % 10;
            sum += digit * digit * digit;
            temp /= 10;
        }
        if (sum == num) 
        {
            printf("%d ", num);
        }
    }
    printf("\n");
    
    return 0;
}

方法三

#include <stdio.h>

int main() {
    int i, j, k, n;
    printf("水仙花数:\n");
    for (n = 100; n <= 999; n++) 
    {
        i = n / 100; // 百位数
        j = n / 10 % 10; // 十位数
        k = n % 10; // 个位数
        if (n == i * i * i + j * j * j + k * k * k) 
        {
            printf("%d ", n);
        }
    }
    return 0;
}

方法四

#include <stdio.h>
#include <math.h>
 
int main()
{
    int a, b, c, n;
    n = 100;
    printf("水仙花数:\n");
    while (n < 1000)
    {
        a = n % 10; // 取个位数
        b = n / 10 % 10; // 取十位数
        c = n / 100; // 取百位数
        if (n == pow(a, 3) + pow(b, 3) + pow(c, 3)) // 判断是否为水仙花数
        {
            printf("%d ", n); // 输出水仙花数
        }
        n++;
    }
    return 0;
}

方法五(函数)

#include <stdio.h>

int isWaterfallNumber(int num) 
{
    int digit1 = num / 100; // 获取百位数字
    int digit2 = (num % 100) / 10; // 获取十位数字
    int digit3 = num % 10; // 获取个位数字
    
    // 判断各位数字的立方和是否等于该数本身
    if(digit1 * digit1 * digit1 + digit2 * digit2 * digit2 + digit3 * digit3 * digit3 == num) 
    {
        return 1; // 是水仙花数
    } else {
        return 0; // 不是水仙花数
    }
}

void printWaterfallNumbers() 
{
    int num;
    
    printf("水仙花数:");
    for(num = 100; num <= 999; num++) 
    {
        if(isWaterfallNumber(num)) 
        {
            printf("%d ", num);
        }
    }
}

int main() 
{
    printWaterfallNumbers();
    return 0;
}

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颓特别我废

你的鼓励将是我创作的最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值