初识C语言——水仙花数

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

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

//思路:这个题目有重复的步骤,所以需要使用循环
#include<stdio.h>

int jude(int a)                //定义的函数,用于条件判断
{
	int n = a;                 //因为后面会用到a,但是a不可以改变,所以创建一个n,对n进行处 
                                 理,间接的对a进行处理(这里的a是形参,和后面主函数的a的意义不 
                                 同)
	int count = 0;            //要累加的时候一般要初始化为0
	int sum = 0;
	while (n != 0)            //需要得到数字的位数;思路:假设a=9,n=9,9!=0;进入循环,count 
                  加上1,变为1,执行下一步,这时n=0;不满足条件,跳出循环,count既是该数的位数
                              //假设a=99,n=99,99!=0;进入循环,处理后n=9,同上
	{
		count++;
		n /= 10;
	} 
	n = a;                    //由于n后面还需要使用其原来的值,而经过上面的处理后n=0,所以再次 
                                对n初始化使其为a的值
	while (n != 0)
	{
		int product = 1;      //累乘时一般初始化为1
		for (int i = 1; i <= count; i++)//对每一位上的数字进行乘积达到各位数的n次方
		{
			product *= (n % 10);
		}
		sum += product;      //将每一位的n次方相加
		n /= 10;
	}
	return sum;              //函数的返回值为每一位的n次方相加
}
int main()
{
	int a = 0;
	for (a = 0; a < 100000; a++)//可以改变a和100000的值,达到求不同范围的水仙花数
	{
		if (a == jude(a))       //条件判断,如果jude函数反回的值与其本身相同,则是水仙花数
		{
			printf("%d ", a);   //输出水仙花数
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值