C语言求自幂数

如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。

例如:在十进制中,153是一个三位数,各个数位的3次幂之和为1^3+5^3+3^3=153,所以153是十进制中的自幂数。

在n进制中,所有小于n的正整数都为自幂数,比如2进制中1是自幂数,3进制中1和2都是自幂数,4进制中1,2和3都是自幂数......

根据自幂数的位数不同,其命名也不同,具体如下:

一位自幂数:独身数

两位自幂数:没有

三位自幂数:水仙花数

四位自幂数:四叶玫瑰数

五位自幂数:五角星数

六位自幂数:六合数

七位自幂数:北斗七星数

八位自幂数:八仙数

九位自幂数:九九重阳数

十位自幂数:十全十美数

对于十进制来说,常见的自幂数有以下

三位的水仙花数共有4个:153,370,371,407;

四位的四叶玫瑰数共有3个:1634,8208,9474;

五位的五角星数共有3个:54748,92727,93084;

六位的六合数只有1个:548834;

七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;

八位的八仙数共有3个:24678050,24678051,88593477;

九位的九九重阳数共有4个: 146511208,472335975,534494836,912985153;

十位的自幂数只有1个:4679307774

现用c语言来寻找自幂数,程序如下:

int weishu(int i_1)
{
	int i = 0;
	do
	{
		i++;
		i_1 /= 10;
	} while(i_1);
	return i;
}

int mi(int m_1,int a_1)
{
	int i = 0;
	int k = 1;
	for (i = 0; i < a_1; i++)
	{
		k = k * m_1;
	}
	return k;
}
int main()
{
	int a = 0;
	int i = 0;
	int j = 0;
	int m = 0;
	int s = 0;
	int b = 0;
	for (i = 0; i <= 100000; i++)//寻找0~100000之间的自幂数
	{
		s = 0;
		b = i;
		a=weishu(b);//求位数
		for (j = 0; j < a; j++)
		{
			m = b % 10;//求各位上的数
			b = b / 10;
			s = s + mi(m, a);//m的a次方求和
		}
		if (s == i)
		{
			printf("%d ", i);
		}
	}
	printf("\n");

	return 0;
}

程序的运行结果如下:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值