
大概看了一下,你判断是否为因子的地方有问题,应该用取余运算符号:%
用除号是不行的,呵呵。
另外,你把求一个数的因子和,写成一个函数,这样的话,程序看起来更明了,你也不容易混乱。
求因子和的函数如下:
int sumf(int num){
int i,sum = 0
for(i = 1i <= 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 = 2i < num i ++)
{
if(num % i == 0)
{
sum += i
渗稿橘 }
}
return sum
}
while(i<a)稿大森 {
键亩 i=i+1
这样当i=a-1时,会进入循环,然后i加1,变成了a,并参与了运算,因此会得出错误结果。
将以上代码改为:(注意,第二个也要改)
while(++i<a){
//i=i+1
应仿宽该就正确了。
#include<尺世stdio.h>陵盯肢则逗
int main()
{
int factor(int x),a,b,i
for(a=1a<=2000a++)
{
b=factor(a)
if(b>a&&factor(b)==a)
printf("%d<-->%d\n",a,b)
}
return 0
}
int factor(int x)
{
int i,sum=0
for(i=1i<=x/2i++)
if(x%i==0)
sum=sum+i
return (sum)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)