回归数是一种特殊的n位数,各位数字的n次幂之和恰好等于它自身,如:
153=1^3+5^3+3^3
1634=1^4+6^4+3^4+4^4
54748=5^5+4^5+7^5+4^5+8^5
试编写一个函数short regress(int num)判断num是否是回归数。要求在main函数中调用regress函数寻找所有的3次幂回归数(又称“水仙花数”),并控制每行2个进行输出显示。
#include<stdio.h>
#include<stdlib.h>
short regress(int num)
{
int a,b,c;
a=num%10;
num/=10;
b=num%10;
c=num/10;
if(num==(aaa+bbb+ccc))
return num;
else
return 0;
}
void main(void)
{
int n,num;
for(n=100;n<1000;n++)
{
num=regress(n);
if(num!=0)
{
printf("%d\n",num);
}
}
system("pause");
}
代码改成如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h> //添加包含pow函数的头文件
short regress(int num)
{
int a, b, c;
a = num % 10;
b = num /10%10; //不应该改变num的值,你之前的num/=10改变了num的值,这样你在下面的等式会出错
c = num/100;
if (num == (pow(a,3) + pow(b, 3) + pow(c,3))) //使用pow函数
return num;
else
return 0;
}
void main(void)
{
int n,num;
for (n = 152; n < 1000; n++)
{
num = regress(n);
if (num != 0)
{
printf("%d\n", n); //应该输出n
}
}
}
修改见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
short regress(int num)
{
int a,b,c;
a=num%10;
//num/=10;
b=num/10%10;
c=num/100;
if(num==(a*a*a+b*b*b+c*c*c))
return 1;//return num;
else
return 0;
}
void main(void)
{
int n,num,i=0;
for(n=100;n<1000;n++)
{
num=regress(n);
if(num!=0)
{
printf(" %d",n); // printf("%d\n",num);
i++;
if(i%2==0) printf("\n");
}
}
system("pause");
}