大概看了一下,你判断是否为因子的地方有问题,应该用取余运算符号:%
成都创新互联公司专业为企业提供海珠网站建设、海珠做网站、海珠网站设计、海珠网站制作等企业网站建设、网页设计与制作、海珠企业网站模板建站服务,十余年海珠做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
用除号是不行的,呵呵。
另外,你把求一个数的因子和,写成一个函数,这样的话,程序看起来更明了,你也不容易混乱。
求因子和的函数如下:
int sumf(int num)
{
int i,sum = 0;
for(i = 1;i = num; i ++)
{
if(num % i == 0)
{
sum += i;
}
}
return sum;
}
不过你所说的因子是否包含了1和数本身?如果包含的话,我运行了一下,2到1000好像没发现有满足条件的。
如果不包含1和本身,倒是有几个,全程序是这样:
#include stdio.h
#include stdlib.h
int main(void)
{ int i;
for(i = 2; i 1000; i++)
{
//printf("%d--%d--%d\n",i,sumf(i),sumf(sumf(i)));
if(i == sumf(sumf(i)))
{
printf("%d %d\n",i,sumf(i));
}
}
system("pause");
return 0;
}
int sumf(int num)
{
int i,sum = 0;
for(i = 2;i num; i ++)
{
if(num % i == 0)
{
sum += i;
}
}
return sum;
}
#includestdio.h
int main()
{
int a,b,n;
int facsum(int n,int *a,int *b);
printf("There are following friendly--numbers pair smaller than 500:\n");
for(a=1;a500;a++) /*穷举500以内的全部整数*/
{
n=facsum(n,a,b);
if(n==aa=b)
printf("%4dand%d\n",a,b); /*若n=a,则a和b是一对亲密数,输出*/
}
}
int facsum(int n,int *a,int *b)
{
int i;
for(*b=0,i=1;i=*a/2;i++) /*计算数a的各因子,各因子之和存放于b*/
if(!(*a%i))
*b+=i; /*计算b的各因子,各因子之和存于n*/
for(n=0,i=1;i=*b/2;i++)
if(!(*b%i))
n+=i;
return n;
}
呵呵,楼主,你还是多看看函数的用法吧,先理清逻辑。
while(ia)
{
i=i+1;
这样当i=a-1时,会进入循环,然后i加1,变成了a,并参与了运算,因此会得出错误结果。
将以上代码改为:(注意,第二个也要改)
while(++ia)
{
//i=i+1;
应该就正确了。