这段代码要怎么写?或者说要用怎样的算法才有较高的效率?
望高手赐教!

解决方案 »

  1.   

    #include <stdio.h>
    #include <conio.h>#define N 1000void main()
    {
     int i,j,sum;
     for(i=2;i<=N;i++)
     {
      sum=0;
      for(j=1;j<=i/2;j++)
    if(i%j==0) sum+=j;
      if(sum==i) printf("%d\n",i);
     }
    }
      

  2.   

    #include <iostream.h>
    void main()
    {
     int i,s=0;
     for (i=1;i<1000;i++)
      {
        for(int j=1;j<i;j++)
           if (i%j==0)
            s+=j;
        if (s==i)
         cout<<i<<endl;
        s=0;
       }
    }
      

  3.   

    to renxiaoyao(任逍遥) :
    好像不太对呀!
      

  4.   

    BOOL Isit(UINT nin)
    {
    int nTotal = 0;
    for(int i = 1; i < nin; i++)
    {
    if(nin % i == 0)
    nTotal += i;
    }
    return nTotal == nin;
    }void main()
    {
    for(int i = 1; i <= 1000; i++)
    {
    if(Isit(i))
    cout << i << endl;
    }
    }
      

  5.   

    改一下试试:
    void main()
    {
     int i,s=0;
     int j;
     for (i=1;i<1000;i++)
      {
        for(int j=1;j<i/2;j++)
           if (i%j==0)
            s+=j;
        if (s==i)
         cout<<i<<endl;
        s=0;
       }
    }
      

  6.   

    To  xuying(),这里所说的因子不考虑重复的情况,你那种想法不对
    TO DD88(程序设计中...) 。这个程序,哪里有问题啊?如果没有记错的话,这是在一年半前我学C++时候做的一道试题
      

  7.   

    对不起,刚试过了,我的不对,renxiaoyao(任逍遥) 的对。
      

  8.   

    peterguan(糖糖) 的只要把for(int j=1;j<i/2;j++)改为for(int j=1;j<=i/2;j++)就行了,就是dcyu(Dd)写的那样,不过最好还是改成fro(int j=1;j<=sqrt(i);j++)