第七题:打印所有的水仙花数

第七题:打印所有的水仙花数
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。

#include <stdio.h>

int main() {
    int i, num, digit, sum;
        
    for (i = 100; i <= 999; i++) {
        num = i;
        sum = 0;
        
        while (num > 0) {
            digit = num % 10;
            sum += digit * digit * digit;
            num /= 10;
        }
        
        if (sum == i) {
            printf("%d\n", i);
        }
    }
    
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7507814
  • 你也可以参考下这篇文章:打印“水仙花数”,所谓“水仙花数”是指一个三位数(100-999),其各位数字立方和等于该数本身。例如: 153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
  • 除此之外, 这篇博客: C语言经典100例精选中的 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<stdio.h>
    // %取个位数 比如 123%10=3
    // /去个位数 比如 123/10=12
    int main() {
    
        for(int i = 100; i < 1000; i++){
            int sum = 0; //累计和
            int temp = i;//用临时变量拆分,原数还要用于比较是不是水仙花数
            //这个循环把每个数拆开求其三次方之和
            do{
                int a=temp%10;
                temp=temp/10;
                sum+=a*a*a;
            }while(temp >0);
    
            //判断:是不是水仙花数
            if(i==sum){
                printf("%d ",i);
            }
        }
    }
    
    

     法二:

    #include<stdio.h>
     
    int main()
    {
        int i,x,y,z;
        for(i=100;i<1000;i++)
        {
            x=i%10;
            y=i/10%10;
            z=i/100%10;
            
            if(i==(x*x*x+y*y*y+z*z*z))
            printf("%d\n",i);
            
        }
        return 0;
    }
  • 以下回答来自chatgpt:

    问题解答:

    根据参考资料中给出的多段代码,我们可以选择其中一段来实现打印所有的水仙花数的功能。

    以下是一种实现方式:

    #include <stdio.h>
    #include <math.h>
    
    int main() {
        int n1, n2, n3, i;
        for (i = 100; i < 1000; ++i) {
            n1 = i / 100; // 百位数
            n2 = (i - 100 * n1) / 10; // 十位数
            n3 = i % 10; // 个位数
    
            if ((pow(n1, 3) + pow(n2, 3) + pow(n3, 3)) == i) {
                printf("%d\n", i); // 打印水仙花数
            } 
        }
    
        return 0;
    }
    

    运行以上代码,即可得到所有的水仙花数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^