求0~100000之间的水仙花数(每一步很详细,看完必理解)

 首先我们要先知道一个概念,什么叫水仙花数:


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

解题思路:


1.产生0~100000之间的数

利用for循环实现

for(int i=0;i<=100000;i++)


2.计算出这个数是几位数(方便后面拆解)

利用while循环实现

int n=0;
while(a)//a是要判断的几位数的数
{
    a/=10;//a每次/10就去掉一位数,下面n++一次,知道a=0循环结束
    n++;//计算a是几位数
}


3.计算每一位数的乘积相加(如:153=1³+5 ³+3 ³,有n位数,这个数字每一位的数要求出他的n次方然后相加)

拆解每一位,%10就可以拆解最后一位,得到它

然后/10就可以去掉最后一位,依此循环

int sum=0;
while(a)
{
    int b=a%10;//把a数的最后一位放在b里面
    int c=pow(b,n);//pow是一个库函数,需要相应的头文件,<math.h>
    //pow的作用是求b的n次方
    //n是第二步中,求出来的几位数
    //然后把求出来的数放在c里
    sum+=c;//把每一次求出来的数相加
    a/=10;//a得最后一位之后在去掉最后一位
    //例如,a原来是1234,%10得到4,/10使得1234变成123,再去循环,%10得到3,依次类推
}


4.判断是否和本身数字相同

if实现

if(sum==a)
printf("%d",a);

全部代码实现:

#include <stdio.h>
#include <math.h>
int main()
{
	for (int i = 0;i <= 100000;i++)
	{
		int a = i;//把i赋值给a用来while判断i是几位数
		int n = 0;
		while (a)
		{
			a /= 10;
			n++;
		}
		a = i;//把i赋值给a用来得到i得每一位数
		int sum = 0;
		while (a)
		{
			int b = a % 10;
			int c = pow(b, n);
			a /= 10;
			sum += c;
		}
		if (sum == i)//最后相加得和等于i就是水仙花数
		{
			printf("%d ", i);
		}
	}
	return 0;
}

运行结果如下

                        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值