C语言水仙花数的求法

来源:百度知道 编辑:UC知道 时间:2024/05/29 01:35:07
#include "stdio.h"
main()
{int a,b,c,q,w;
for(q=100;q<=999;q++)
{
a=q/100;
b=(q-100*a)/10;
c=(q-100*a-10*b);
w=a^3+b^3+c^3;
if(w==q)
printf("%d\n",q);
}

}为什么我的不对呢?

w=a^3+b^3+c^3;
修改为:
w=a*a*a+b*b*b+c*c*c;

^这个符号在C里表示位运算符中的异或运算符 并不像在某些语言中表示某个数的几次方
所以w=a^3+b^3+c^3;应该写成 w=a*a*a+b*b*b+c*c*c;

a^3表示的是a与3异或,并不是你所想象的a的3次方,a的3次方的一个表达方式是pow(x,3);pow函数包含在"math.h"里面。可以写成如下:
#include "stdio.h"
#include"math.h"
main()
{int a,b,c,q,w;
for(q=100;q<=999;q++)
{
a=q/100;
b=(q-100*a)/10;
c=(q-100*a-10*b);
w=pow(a,3)+pow(b,3)+pow(c,3);
if(w==q)
printf("%d\n",q);
}
}
其中,pow返回值是double类型的,两个参数也是double类型的,这里可以不介绍数据类型的转换了,自己看。
另外一种方法就是如楼上说得一样。

#include <stdio.h>
int main(void)
{
int a,b,c;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf("%d%d%d\n",a,b,c);
return 0;
}