c语言实现水仙花数

水仙花数:实际上是自幂数的定义
自幂数的定义:对于一个 n位数来说:如果每个位的数字的n次幂之和等于该n位数,那么我们就称该数为自幂数。
对于3位数来说: 1 3 + 5 3 + 3 3 = 153 1^3+5^3+3^3=153 13+53+33=153这是我们常见的一个水仙花数。
因为水仙花数是自幂数的一种,因此直接判断一个数是否为自幂数即可。
原理比较简单:

  1. 首先判断输入的i为几位数。
  2. 每个位的n次幂之和是否等于i;
    这里涉及到了求每个位上的数字,以3位数为例:百位,十位,个位。

下面看一下代码,如下:

#include<stdio.h>
#include<math.h>
int Is_Nt(int i)
{
	int tmp = i; //临时变量tmp存储i的值,因为后面还有使用到i,不要在循环内改变i的值。
	int n = 1;//最少为1位数。
	int ret = 0;
	//判断为几位数;123/10=12,n=2;12/10=1,n=3
	while (tmp /= 10)
	{
		n++;
	}
	//三位数的话,求百位,十位,个位。
	//第一次进去i%10为个位,i除以10,再取余得到它的十位,依次类推。
	while (i)
	{
		ret = ret +(int) pow(i % 10, n);
		i = i / 10;
	}
	return ret;
}
int main()
{
	int i = 0;
	for (i = 0; i < 100000; i++)
	{
		int ret = Is_Nt(i);
		if (ret == i)
		{
			printf("%d为自幂数\n", i);
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值