如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。编程计算并输出所有的n的所有情况。

如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。编程计算并输出所有的n的所有情况。
慕课上的题是这样:
如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。四位自方幂数称为玫瑰花数。编程计算并输出所有的玫瑰花数。
MOOC只让算出4位数的,而我跟一个傻子一样把1到n的全都输出了,不过把下面的for循环改一改就对了


#include<stdio.h>
#include<math.h>
/*这个lv函数用来将n的每一位数都分离*/
int lv(int n,int a[])
{
	 int i,p=0;
	 int lp[1000];
	 for(i=0,p=0;;i++)
	 {
	 	a[i]=n%10;
	 	n=n/10;
	 	lp[i]=n;
		p++;
	if(lp[i]==0)/*当它lp[i]=0的时候n也就是等于0,他们一直除以10,用p计算除了多少次*/
	   	break;/*p等于2的时候就是两位数,除了3次,最后一次除以一定等于0,才跳出*/
	 }
	 return p;
}
int main()
{
 	int a[1000];
	 int i,p,j,sum=0;
 	for(i=1000;i<10000;i++)/*慕课上要求是四位数,在这里要求一下就可以了,(i=1000;i<10000;i++)*/
 	{
  		p=lv(i,a);/*这里调用函数,p也就是表示了有几位数*/
  		for(j=0,sum=0;j<p;j++)/*这个for循环用来计算n的几次幂的和*/
 		{
   		sum=sum+pow(a[j],p);
  		}
		if(sum==i)/*判断几次幂的和是否和i相等*/
   		printf("%d\n",i);
 	}
 	return 0;
}

在这里插入图片描述

下面这个不是四位数,是1到n的

#include<stdio.h>
#include<math.h>
int lv(int n,int a[])
{
 	int i,p=0;
 	int lp[1000];
 	for(i=0,p=0;;i++)
	{
  		a[i]=n%10;
  		n=n/10;
  		lp[i]=n;
  		p++;
  		if(lp[i]==0)
   			break;
 	}
 	return p;
}
int main()
{
 	int a[1000];
 	int i,p,j,sum=0;
 	for(i=1;;i++)
	 {
  		p=lv(i,a);
  		for(j=0,sum=0;j<p;j++)
 		{
   			sum=sum+pow(a[j],p);
  		}
		if(sum==i)
   		printf("%d\n",i);
 	}
 	return 0;
}

这里只计算到了88593477,下面估计还有好多,

在这里插入图片描述

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值