水仙花数计算问题

一、问题

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

二、思路 

这里求0~100000以内的水仙花数示范

1. 生成0~100000的数

	int num = 0;	//从0~100000
	for (num = 0; num <= 100000; num++)
{

}

2.计算num的位数

int getn(int x)		//计算n
{		// x->num
	int n = 1;
	while (x > 9)
	{
		x /= 10;
		n++;
	}
	return n;
}

3.num每一位的n次方相加的和与num相等就是水仙花数

int ifn(int a, int n,int b)
{		//a->num  n->n  b->sum
	if (a >= 10)
	{
		for (int x = 1; x <= n; x++)	//x控制变量,让循环进行n次
		{
			int y = 1;
			int i = a % 10;		//i是num每一个位上的数
			a /= 10;			//num删掉i后剩下的数
			for (int j = 0; j < n; j++)		//j控制变量,让循环进行n次
			{
				y *= i;		//生成i的n次方,存放到y
			}
			b += y;		//b是y之和,也就是要求的sum
		}
		return b;
	}
	else	//个位数( 0 ~ 9 )一定是水仙花数
		return a;
}

三、代码全貌

int getn(int x)		//计算n
{		// x->num
	int n = 1;
	while (x > 9)
	{
		x /= 10;
		n++;
	}
	return n;
}
int ifn(int a, int n,int b)
{		//a->num  n->n  b->sum
	if (a >= 10)
	{
		for (int x = 1; x <= n; x++)	//x控制变量,让循环进行n次
		{
			int y = 1;
			int i = a % 10;		//i是num每一个位上的数
			a /= 10;			//num删掉i后剩下的数
			for (int j = 0; j < n; j++)		//j控制变量,让循环进行n次
			{
				y *= i;		//生成i的n次方,存放到y
			}
			b += y;		//b是y之和,也就是要求的sum
		}
		return b;
	}
	else	//个位数( 0 ~ 9 )一定是水仙花数
		return a;
}
int main()
{
	int num = 0;	//从0~100000
	int n = 1;		//num的位数
	for (num = 0; num <= 100000; num++)
	{
		int sum = 0;	//num每一位上的数的n次方相加,存在sum里,和num相等就是水仙花数
		n = getn(num);		//计算n
		sum = ifn(num, n, sum);		//计算sum
		if (num == sum)
			printf("%d ", num);
	}
	return 0;
}

四、计算结果

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值