水仙花数是指一个 n 位数 ( n≥3 ),每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)。
成都创新互联公司专注于中大型企业的网站建设、网站设计和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户成百上千,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注成都品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!
所以可以依次通过模除求得每个位上的值,然后做n次幂后相加,再判断是否与本身相等,从而得到是否为水仙花数的结论。
以求所有三位数水仙花数为例,代码如下,其它相似。
#includestdio.h
#includestdlib.h
#includestdbool.h
int cube(const int n){//计算立方。如果是四位则是四次方,以此类推。
return n*n*n;
}
int isNarcissistic(const int n){//计算是否为水仙花数。
int hundreds=n/100;//百位
int tens=n/10-hundreds*10;//十位
int ones=n%10;//个位
return cube(hundreds)+cube(tens)+cube(ones)==n;//如果相等,则为水仙花数。
}
int main(void){
int i;
for(i=100;i1000;++i){//对所有三位数判断。
if(isNarcissistic(i))//如果是则输出。
printf("%d\n",i);
}
return 0;
}
你需要对返回的数加一个判断,你的函数中,如果相等你有返回值,如果不相等你没有返回值,但是你的主函数中还是对这个没有返回的值进行了输出
#include stdio.h
int main()
{
int f(int m);
int n;
printf ("result is: ");
for (n = 100; n 1000; n++)
{
if (f(n)0)/////////////////////////
printf ("%d ", f(n) );
}
printf ("\n");
return 0;
}
int f(int m)
{
int a,b,c;
a=m/100;
b=(m-a*100)/10;
c=m%10;
if(m==a*a*a+b*b*b+c*c*c)
return (m);
else return -1;////////////////////////
}
你这里没有用到判断。所以它会把每个数都输出。
把is函数设成boolean类型的,如果是水仙花数就return true,如果不是就return false
就是if(number==i*i*i+m*m*m+n*n*n){ return true;)else return false;
...
这是你原来is函数里的一部分,按照上面那样改。
if(number==i*i*i+m*m*m+n*n*n){
return number;
}
下面这里是你的main函数的部分,
for(i=m;i=n;i++){
m=is(i);
printf("%d\n",m);
改成
for(i=m;i=n;i++){
if(is(i)){
printf("%d\n",i);
}
就可以了
int li(int n)
{ return n*n*n;
}
int shuixian(int n)
{
int b,s,g;
b=n/100;
s=n/10%10;
g=n%10;
if((li(b)+li(s)+li(g))==n)
return 1;
return 0;
}
int main()
{
int i;
scanf("%d",i);
if(shuixian(i))
printf("%d\n",i);
return 0;
}