求出0~100000之间的所有“水仙花数”并输出。

少爷 公主们请看题,首先先来介绍一下什么是”水仙花数":

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

那么由上可知,如何确定它是一个“水仙花数”,首先我们要确定它是一个几位数,然后把它的每一位分离出来,最后再来看看分离出来的每一位的n次方是否等于它本身。既然我们大概有了一个思路,接下来就开始逐步写。

我们写一个函数来判断它是不是水仙花数:

int isShui(int a) 
{

}

首先我们先判断它是一个几位数:

while (a != 0) 
{
    a /= 10;
    ++n;
}

接下来就是把它的每一位分离出来,假设为1234,那么1234%10=4分离出来4),然后再1234/10=123为下一次分离3出来),接着就是123的分离,如此的重复上述步骤。直到n/10=0,我们就结束循环,那么我们可以如此写道:

while (a != 0) 
{
    b = a % 10;
    result += pow(b, n);
    a /= 10;
}

但是我们写到这一步发现:上面我们在计算是几位数时,我们改变了a的值,而后面在分离时也要用到a,所以我们要保证a的值在此期间不能有所改变!所以此时我们可以借助另外一个数来等于a,使其保证不会被改变:

int isShui(int num) 
{
    int a, b;
    int n = 0;
    int result = 0;

    a = num;

    //计算是几位数
    while (a != 0) 
    {
        a /= 10;
        ++n;
    }

    a = num;

    while (a != 0) 
    {
        b = a % 10;
        result += pow(b, n);
        a /= 10;
    }
}

接下来就是根据其返回值来判断是不是水仙花数,假设我们规定1为其水仙花数,0则表示不是:

int isShui(int num) 
{
    int a, b;
    int n = 0;
    int result = 0;

    a = num;

    //计算是几位数
    while (a != 0) 
    {
        a /= 10;
        ++n;
    }

    a = num;

    while (a != 0) 
    {
        b = a % 10;
        result += pow(b, n);
        a /= 10;
    }
    if (num < 10)
        return 0;
    if (result == num)
        return 1;
    else
        return 0;
}

那么最后就是我们主函数了,主函数就很容易了,接下来我们就来看看整体的代码:

int isShui(int num) 
{
    int a, b;
    int n = 0;
    int result = 0;

    a = num;

    //计算是几位数
    while (a != 0) 
    {
        a /= 10;
        ++n;
    }
    a = num;
    while (a != 0) 
    {
        b = a % 10;
        result += pow(b, n);
        a /= 10;
    }
    if (num < 10)
        return 0;
    if (result == num)
        return 1;
    else
        return 0;
}
int main() 
{
    
    printf("水仙花数:\n");
    for (int i = 1; i < 100000; i++) 
    {
        if (isShui(i))
        {
            printf("%d\n", i);
        }
    }

    return 0;
}

看看运行效果:

求出0~100000之间的所有“水仙花数”并输出。_第1张图片

 少爷 公主你学废了吗?

你可能感兴趣的:(c语言,学习)