C语言经典题目 实现输出1~100000之间所有的水仙花数

导读:本篇文章讲解 C语言经典题目 实现输出1~100000之间所有的水仙花数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

水仙花数的介绍:

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

该题难点:

1.确定每个数字的位数;

2.分离每个数字的各个位数;

3.将每个数字的各个位数按照总位数进行次方相乘

解决方案 :

1.定义一个函数来判断每个数字的位数

函数代码如下:

int Digit(int n)
{
	int digit = 0;//digit用来记录数字的位数
	while (n > 0)
	{
		digit++;
		n /= 10;
	}
	return digit;
}

2.定义一个函数来分离每个数字的个位、十位、百位…….

利用取余的方式完成该函数的编写,代码如下:

int num(int n)
{
    n %= 10;
    return n;
}

3.根据上述定义的两个函数完成判断数字是否为水仙花数,再定义一个判断函数,函数代码如下:

int Judge(int n, int digit)//每次传入数字和该数字的位数
{
    int a, b, sum = 0, c = n;//a用来记录每次分离出的数字,sum用来记录各个位数的次方乘后之和,c用来保存传入的数字
    for (int i = 0; i < digit; i++)
    {
        b = 1;//b每次循环后初始化为1,以便进行下列操作
        a = num(n);
        for (int j = 0; j < digit; j++)
        {
            b *= a;
        }
        sum += b;
        n /= 10;
    }
    if (sum == c)
        return 1;
    return 0;
}

源码如下:

#define _CRT_SECURE_NO_WARNINGS
 
#include <stdio.h>
#include <math.h>
 
int Judge(int n, int digit);//判断该数是否为水仙花数
int Digit(int n);//判断该数的位数
int num(int n);//分解该数的每一位
 
int main()
{
    int digit = 0;
    for (int i = 0; i < 100000; i++)
    {
        digit = Digit(i);
        if (Judge(i, digit))
            printf("%d ", i);
    }
    return 0;
}
 
int Judge(int n, int digit)
{
    int a, b, sum = 0, c = n;
    for (int i = 0; i < digit; i++)
    {
        b = 1;
        a = num(n);
        for (int j = 0; j < digit; j++)
        {
            b *= a;
        }
        sum += b;
        n /= 10;
    }
    if (sum == c)
        return 1;
    return 0;
}
 
int Digit(int n)
{
    int digit = 0;
    while (n > 0)
    {
        digit++;
        n /= 10;
    }
    return digit;
}
 
int num(int n)
{
    n %= 10;
    return n;
}

运行结果如下:
C语言经典题目 实现输出1~100000之间所有的水仙花数

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119609.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!