题目如下:如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。四位自方幂数称为玫瑰花数。编程计算并输出所有的玫瑰花数。
输入格式:无
输出格式:"%d\n"
1.用传统方法(数位分离法)求玫瑰花数
#include<stdio.h>
int getnum(int num);
int main()
{
int num;
for(num=1000;num<10000;num++)
{
if(getnum(num))
printf("%d\n",num);
}
}
/* 输出所有玫瑰花数的函数 */
int getnum(int num)
{
int a,b,c,d; //a为千位数字,b为百位数字,c为十位数字,d为个位数字
{
a=num/1000;
b=(num-a*1000)/100;
c=(num-a*1000-b*100)/10;
d=(num-a*1000-b*100-c*10);
if(num!=a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
{
return 0;
}
}
return 1;
}
2.用数组方法求玫瑰花数
#include<stdio.h>
int main()
{
int i,j,num[4],number,sum; //此处定义了一个有4个元素的数组num[4],用于存放一个数的四位数字
for(i=1000;i<10000;i++) //利用for循环对1000至10000之间的四位数遍历检验
{
number=i;
j=0; //定义j作为数组元素的下标
do{
num[j]=number%10; //此处的do-while语句实际上是对某一四位数从个位到千位逐步分离
j++;
number/=10;
}while(number>0);
sum=0;
for(j=0;j<4;j++)
{
sum+=num[j]*num[j]*num[j]*num[j]; //此处利用数组的便利性对已经分离出的个位数字进行4次方后再求和
}
if(i==sum)
{
printf("%d\n",i);
}
}
}