题目如下:如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。四位自方幂数称为玫瑰花数。编程计算并输出所有的玫瑰花数。
输入格式:无
输出格式:"%dn"
1.用传统方法(数位分离法)求玫瑰花数
#include<stdio.h> int getnum(int num); int main() {int num;for(num=1000;num<10000;num++){if(getnum(num))printf("%dn",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; }
1234567891011121314151617181920212223242526272829303132332.用数组方法求玫瑰花数
#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("%dn",i);}} }
12345678910111213141516171819202122232425