急!!输入2个正整数m和n(m>=1,n<=1000),输出m~n之间的所有完数,完数就是因子和与它本身相等的数。要求

输入2个正整数m和n(m>=1,n<=1000),输出m~n之间的所有完数,完数就是因子和与它本身相等的数。要求定义并调用函数factorsum(number),它的功能是返回number的因子和。例如,factorsum(12)的返回值是16(1+2+3+4+6)
我这个哪里错了?求指导
# include<stdio.h>
int main()
{int factorsum(int number);
int m,n,a;
m>=1;
n<=1000;
scanf("%d,%d",&m,&n);
for (a=m;a<=n;a++)
{if (a=factorsum(a))
printf("%d",a);
}
}

int factorsum(int number)
{int i=1,a=0;
for(i=1;i<number;i++)
{if(number%i==0)
a=a+i;
}
return a;
}

运行不出结果

#include<stdio.h>

int main()

{

     int factorsum(int number);

     int m,n,a;

     //这两句去掉,没有意义

     //m>=1;

     //n<=1000;

     scanf("%d,%d",&m,&n);

     for (a=m;a<=n;a++)

     {

          if (a==factorsum(a))//判断是否相等应该是==if (a=factorsum(a))

           printf("%d ",a);//输出元素间加个空格分开printf("%d",a);

     }

}

 

int factorsum(int number)

{

     int i=1,a=0;

     for(i=1;i<number;i++)

     {

      if(number%i==0)

       a=a+i;

     }

     return a;

}

 

 

 

 

追问

结果应该还有1,比如输入1,100 输出应该是1,6,28
请问要怎么改呢?

追答

factsum函数,for循环条件改成i<=number
不对,不要那么改,直接在他循环外面加判断,如果number==1直接return1
而且个人觉得1不算完数

追问

改成i<=number后就只输出一个1了,我把主函数多加了一个if(m==1)printf("%d ",m);。

追答

最好在factsum里判断,如果number==1直接return 1
最好在factsum里判断,如果number==1直接return 1
最好在factsum里判断,如果number==1直接return 1
最好在factsum里判断,如果number==1直接return 1

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-16

 

#include<stdio.h>

int main()

{int factorsum(int number);

int m,n,a;

m>=1;

n<=1000;

scanf("%d,%d",&m,&n);//要输入逗号 你输入数据时有没输入逗号呢?

for (a=m;a<=n;a++)

{if (a==factorsum(a))//是等于号  就这一个问题  其它地方都是对的

printf("%d  ",a);

}

}

int factorsum(int number)

{int i=1,a=0;

for(i=1;i<number;i++)

{if(number%i==0)

a=a+i;

}

return a;

}

第2个回答  2013-04-16
factorsum函数定义有误,里面的a与之前的a可能有冲突,换个名称试试。
第3个回答  2013-04-17
尕多萨格舍得噶倒萨速度速度感