关于C语言水仙花数的问题

输入2个正整数M N(1<=m,n<=1000),输出M到N之间的所有水仙花数 要求调用并定义is(number)判断number是不是水仙花数
我是这样写的
#include<stdio.h>
int main(void)
{
int m,n,i;
int is(int number);

printf("Enter m:");
scanf("%d",&m);
printf("Enter n:");
scanf("%d",&n);
for(i=n;i<=m;i++){
if(is(i)==1)
printf("d\n",i);
}

return 0;
}
int is(int number)
{

int i,a,b,c,d,e;
a=i%10;
b=(i/10)%10;
c=(i/100)%10;
d=(i/1000)%10;
e=a*a*a+b*b*b+c*c*c+d*d*d;
if(i==e)
return 1;
else
return 0;
}

不知道哪里错了?
因为我刚学到定义函数 所有有哪位高手就我用的知识程度上帮我修改一下?
for 的 m和n写反了 请别在意
不过改过之后还是错的
就是什么都没输出出来

函数里边传过去的值赋给了number,但是没有给i
加个i=number;
另外 主函数里边的输出部分printf("%d\n",i);百分号别丢了。
刚开始学写程序都会有一定的粗心 以后多写多练就好了
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-13
#include<stdio.h>
int is(int number);
void main()
{
int m,n,i,tmp;
printf("Enter m:");
scanf("%d",&m);
printf("Enter n:");
scanf("%d",&n);
for(i=n;i<=m;i++)
{
tmp=is(i);
{
if(tmp==1)
{
printf("%d\n",i);
}
}
}

}
int is(int number)
{
if(number>=100)
{
int g=number%10;
int s=number/10%10;
int b=number/100;
if(g*g*g+s*s*s+b*b*b==number)//水仙花数大于等于三位数
{
return 1;
}
else
{
return 0;
}
}
}
第2个回答  2011-04-13
首先那个函数is的声明应放在主函数外面,其次在这里,水仙花数是三位数不是四位,a=i/100(百位数),b=(i/10)%10(十位数),c=i%100(各位数)
第3个回答  2011-04-13
第一点 觉得is(number )最好定义为bool返回值。。
个人觉得这个程序应该没什么问题 至于为什么每输出结果 有其他方面的问题??
第4个回答  2011-04-15
的百位数,既a为百位数字;
b=number/10-10*a;这句指中的number/10指取三位数的前两位(百位和十位),比如一个数123,取前两位得到一个十位数12;后面的"-10*a"指扣去乘以十的百位数位,就是说12-10=2,因此的到的是十位数位;
c的做法也是一样的:用总数扣去(十位数位)*10+(百位数位)*100,得到的是个位数位,于是完成了提取三位数各位数的工作.
不过这个做法的确让人看了不是很明白,我建议用这个方法:
a=number/100%10;
b=number/10%10;
c=number/1%10;
这样也可以完成以上的工作,而且看起来比较有规律~~~
呵呵~~自己解释的也不是很好,不知道你能不能明白.
另外,站长团上有产品团购,便宜有保证
相似回答