Armstrong数,n位数等于其各位数的n次方之和。

//Armstrong数具有以下特征:一个n位数等于其各位数的n次方之和。
    //例如:153=1^3+5^3+3^3     1634=1^4+6^4+3^4+4^4

#include
#include
//实在不知道的暴力求解方法 
int main()
{
	//Armstrong数具有以下特征:一个n位数等于其各位数的n次方之和。
	//例如:153=1^3+5^3+3^3 	1634=1^4+6^4+3^4+4^4
	int i,a,b,c,d,e;
	for(i=10;i<=99999;i++)
	{
		if(i<100)
		{
			a=i%10;
			b=i/10;
			if(i==a*a+b*b)
			{
				printf("%d ",i);
			}
		}
		else if(i<1000)
		{
			a=i/100;
			b=(i/10)%10;
			c=i%10;
			if(i==a*a*a+b*b*b+c*c*c)
			{
				printf("%d ",i);
			}
		}
		else if(i<10000)
		{
			a=i%10;
			b=(i/10)%10;
			c=(i/100)%10;
			d=i/1000;
			if(i==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
			{
				printf("%d ",i);
			}
		}
		else
		{
			a=i%10;
			b=i/10%10;
			c=i/100%10;
			d=i/1000%10;
			e=i/10000;
			if(i==a*a*a*a*a+b*b*b*b*b+c*c*c*c*c+d*d*d*d*d+e*e*e*e*e)
			{
				printf("%d ",i);
			}
		}
	}	 
	return 0;
}

递归法实现:

#include
#include
//Armstrong数具有以下特征:一个n位数等于其各位数的n次方之和。
	//例如:153=1^3+5^3+3^3 	1634=1^4+6^4+3^4+4^4
int static sum2=0;
int fun(int n,int count)
{	
	if(n>0)
	{
		sum2=sum2+pow(n%10,count);	
		fun(n/10,count);
	}	
	return sum2;
} 
int main()
{
	int i,j,sum,count=0;
	for(i=10;i<=99999;i++)
	{
		int count=0;
		j=i;
		while(j>0)
		{
			count++;
			j=j/10;
		}
		sum=fun(i,count);
		if(i==sum) 
		{
			printf("%d ",i);
		}
		sum2=0;//全局变量置为0 
	}
	return 0;
}

你可能感兴趣的:(C语言程序设计,算法)