输入两个正整数m和n,(m>=1,n<=1000), 输出m~n之间所有满足各位数字的立方和等于它本身的数

输入两个正整数m和n,(m>=1,n<=1000), 输出m~n之间所有满足各位数字的立方和等于它本身的数
我写出来了,但是最后那个函数定义看不懂,求解释
#include "stdio.h"
#include "math.h"
int main( )
{
int i, m, n;
int is(int number);
printf("enter m:"); /*m>=1*/
scanf("%d",&m);
printf("ernter n:"); /*n<=1000*/
scanf("%d",&n);

for(i=m;i<=n;i++){
if(is(i))
printf("%d ", i);
}
}
int is(int number)
{
int temp,digit,sum,res;
temp=number;
sum=0;
while(number!=0){
digit=number%10;
sum=sum+pow(digit,3);
number=number/10;
}
if(sum==temp)
res=1;
else
res=0;
return res;
}
就是这个
int is(int number)
{
int temp,digit,sum,res;
temp=number;
sum=0;
while(number!=0){
digit=number%10;
sum=sum+pow(digit,3);
number=number/10;
}
if(sum==temp)
res=1;
else
res=0;
return res;
}

int is(int number)//定义一个返回值为int型的函数,命名为is,并定义一个int型参数number
{
int temp,digit,sum,res;
temp=number;//将传递进来的参数number赋值给temp
sum=0;//初始化和为0
while(number!=0){//如果传递进来的数字不为0,执行while循环
digit=number%10;//获取个位上的数字
sum=sum+pow(digit,3);//将和加上上行代码所获得的个位数字的立方和
number=number/10;//将数字除以10,继续while循环
}
if(sum==temp)//根据sum的结果判断是否为水仙花树
res=1;
else
res=0;
return res;
}
这个函数用于判断是否是水仙花数(也就是你说的各位数字立方和等于本身)

你这个程序有一个bug,就是没有判断用户的输入是否为合法的。对用户输入的m n的值范围没有进行判断。可进行相应的修改,使程序更完美。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-18
讲的非常好,我补充完善一下:
int is(int number)//定义一个返回值为int型的函数,命名为is,并定义一个int型参数number
{
int temp,digit,sum,res;
temp=number;//将传递进来的参数number赋值给temp
sum=0;//初始化和为0
while(number!=0)//如果传递进来的数字不为0,执行while循环
{//如果传递进来的数字不为0,执行while循环
digit=number%10;//将number除以10求余数,将余数赋值给digit,这样就
//可以获取最后位上的数字
sum=sum+pow(digit,3);//将和与该位数字的立方相加
number=number/10;//将number除以10求商,将商赋值给他自己本身,这样
//就缩小了10倍,比如93%10=9缩小了10倍
}//以上过程往复循环,则可以求出number每一位的立方,并将它们的和
//存储于sum中了
if(sum==temp)//根据sum的结果判断是否为水仙花树
res=1;
else
res=0;
return res;
}
这个函数用于判断是否是水仙花数(也就是你说的各位数字立方和等于本身)
第2个回答  2009-10-18
你的问题很像水仙花数
比如 153 = 1*1*1 + 5*5*5 + 3*3*3
你要求的水仙花的算法如下:
#include "stdio.h"
void main()
{
int a,b,c,n,i=0;
int p,q;
scanf("%d",&p);
scanf("%d",&q);
for(n=p;n<=q;n++)
{
a=n/100;
b=(n-a*100)/10;
c=(n-a*100-b*10);
if(n==a*a*a+b*b*b+c*c*c)
printf("%d ",n);
else continue;
i=i+1;
if(i%5==0)printf("\n");
}
printf("\n");
}