是指一个三位数,其各位数字的立方和等于该数本身153=13+53+33,所以 153 就是一个 水仙花数 。求出所有的 水仙花数 帮我看一下我的程序 哪里出错了 自己都不知道自己的代码是什么意思了


#include<stdio.h>
int main()
{
    int i=1, j=1, n,chushi=1;
    scanf_s("%d", &n);
    while (i < n)
    {
        chushi = chushi * 10;
        i++;
    }
    int k = chushi;
    while (k < chushi * 10)
    {
        int m = k;
        int t, l=1, sum = 0;
        t =m% 10;
        m = m/ 10;
        while (m> 0)
        {
            while (j < n)
            {
                l*= t;
                j++;

            }
            sum += t;
        }
        if (sum ==k)
        {
            printf("%d\n", k);
        }
        k++;
    }

}

根据你的代码,我做了一些修改和补充:

#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);

    for (int k = 100; k < 1000; k++)
    {
        int sum = 0;
        int temp = k;

        while (temp > 0)
        {
            int digit = temp % 10;
            sum += digit * digit * digit;
            temp /= 10;
        }

        if (sum == k)
        {
            printf("%d\n", k);
        }
    }

    return 0;
}

这段代码会找出所有的三位水仙花数并打印出来。我使用了一个 for 循环来遍历所有的三位数,并使用一个 while 循环来计算每个数的各位数字的立方和。如果立方和等于这个数本身,那么就打印出该数。

如若有用,还望博友采纳!

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7734316
  • 这篇博客也不错, 你可以看下6.10.水仙花数是指各位数字的立方和等于该数本身的三位数。例如153是水仙花数,请编程并计算出所有的水仙花数。
  • 除此之外, 这篇博客: 本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。中的 输入样例3: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • -2
    
  • 以下回答由chatgpt基于相关博客总结生成:

    可以帮助您解决这个问题。首先,让我们一步一步地分析您提供的代码,并解释其含义和作用。

    代码中主要有两个部分,一个是判断一个给定数字是否为水仙花数的部分,另一个是输出所有的水仙花数的部分。

    1. 判断是否为水仙花数的部分:
    int N, a, b, c;
    scanf("%d",&N);
    if(100<=N&&N<=999){
        a=N%10; // 分离出个位的数字
        b=N/100; // 分离出百位的数字
        c=(N%100-a)/10; // 分离出十位的数字
        if(N==a*a*a+b*b*b+c*c*c){
            printf("Yes");
        }else{
            printf("No");
        }
    }else{
        printf("Invalid Value.");
    }
    

    这段代码中,首先通过scanf函数获取用户输入的数字,并将其保存在变量N中。然后通过取余和整除操作分离出该数字的个位、十位和百位数字,分别保存在变量a、b和c中。接着,根据水仙花数的定义,判断N是否等于各位数字立方和,如果是,则输出"Yes",否则输出"No"。如果N不是三位数,则直接输出"Invalid Value."。

    这段代码中的逻辑是正确的,没有错误。对于任意三位数的输入,都能正确判断其是否为水仙花数。

    1. 输出所有水仙花数的部分:
    for (int i = 100; i <= 999; i++)
    {
        Hundredth = i / 100; // 取百位
        Ten = (i / 10) % 10; // 取十位
        Bit = i % 10; // 取个位
        if ((Hundredth * Hundredth * Hundredth) + (Ten * Ten * Ten) + (Bit * Bit * Bit) == i)
            printf("%d\n", i);
    }
    

    这段代码使用了一个循环,从100循环到999。在每次循环中,通过整除和取模操作分别取出当前数字的百位、十位和个位数字,并保存在对应的变量中。然后根据水仙花数的定义,判断当前数字是否为水仙花数,如果是,则使用printf函数输出该数字。

    这段代码有一个小错误,即在循环之前没有对HundredthTenBit进行声明。您可以在代码开头添加以下声明语句:

    int Hundredth, Ten, Bit;
    

    这样就能正确运行代码,并输出所有的水仙花数。