c语言 求出亲密数对

c语言 求出亲密数对,第1张

大概看了一下,你判断是否为因子的地方有问题,应该用取余运算符号:%

除号是不行的,呵呵。

另外,你把求一个数的因子和,写成一个函数,这样的话,程序看起来更明了,你也不容易混乱。

求因子和的函数如下:

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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8226390.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存