要求
请编写函数fun,其功能是:求n(n<10000)以内的所有四叶玫瑰数并逐个存放到result所指的数组中,四叶玫瑰数的个数作为函数值返回。
如果一个4位正整数等于其各个数字的4次方之和,则称该数为四叶玫瑰数。
1634=1*1*1*1+6*6*6*6+3*3*3*3+4*4*4*4
因此1634就是一个四叶玫瑰数。
解题思路:
本程序使用for循环遍历所有数,while循环分解当前数的各个位的值,并四次方后累加求和,若该和与原数相等,则满足要求,保存。
代码
#include<stdio.h>
#pragma warning (disable:4996)
int fun(int n, int result[])
{
int i = 0;
int k = 0;
for(i=1000;i<n;i++)
{
/*int j =i;
int a = i/1000;i+=(a*1000);
int b = (i-(a*1000))/100;i+=(a*1000)+(b*100);
int c =(i-(a*1000)-(b*100))/10;i+=(a*1000)+(b*100)+(c*10);
int d =(i-(a*1000)-(b*100))%10;
if(j==(a*a*a*a)+(b*b*b*b)+(c*c*c*c)+(d*d*d*d))
{
result[k]=j;
k++;
}*/
int j =i;
int sum=0;
while(j>0)
{
sum+=(j%10)*(j%10)*(j%10)*(j%10);
j=j/10;
}
if(sum==i)
{
result[k]=i;
k++;
}
}
return k;
}
main( )
{
int result[10], n, i;
void NONO(int result[], int n);
n = fun(9999, result);
for(i=0; i<n; i++) printf("%d\n", result[i]);
NONO(result, n);
}
void NONO(int result[], int n)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp ;
int i;
fp = fopen("out.dat","w") ;
fprintf(fp, "%d\n", n);
for(i=0; i<n; i++) fprintf(fp, "%d\n", result[i]);
fclose(fp);
}