WHCSRL 技术网

求猿师兄们解答

        各位猿前辈! 求助!求助!

        在做C语言题目时,遇到一个不能理解的问题!

        C语言原题如下:

                        一个数如果恰好等于它的因子之和,这个数就被称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。找出1000之内的所有完数,并输出。

        可是在我写完代码以后:

        却频频运行出错:

 经过半个小时的调整,终于发现了其中的原因:

当我把sum放在for()函数前赋值时,程序就会运行出错,不执行任何输出:

 当我把sum放在for()函数内赋值时,程序就会成功执行:

 成功执行:

                                                                 我无法李姐!                                                                    

 附上错误代码:

#include<stdio.h>
int main(void)
{
    int n=0,i=0,sum=0,o=0,k=0;
    for(n=1;n<=1000;n++)
    {
        
        for(i=1;i<=n;i++)
        {
            o=n%%i;
            if(o==0&&i!=n)
            {
                sum=sum+i;
            }else if(i==n&&sum==n)
                    {        
                        printf("%%d:",n); 
                            for(k=1;k<=n;k++)
                            {
                                if(n%%k==0&&k!=n)
                                {
                                    printf(" %%d",k);
                                }
                            }    printf(" ");        
                    }
        }
    }
}

以及正确代码:

#include<stdio.h>
int main(void)
{
    int n=0,i=0,sum,o=0,k=0;
    for(n=1;n<=1000;n++)
    {
        sum=0;
        for(i=1;i<=n;i++)
        {
            o=n%%i;
            if(o==0&&i!=n)
            {
                sum=sum+i;
            }else if(i==n&&sum==n)
                    {        
                        printf("%%d:",n); 
                            for(k=1;k<=n;k++)
                            {
                                if(n%%k==0&&k!=n)
                                {
                                    printf(" %%d",k);
                                }
                            }    printf(" ");        
                    }
        }
    }
}

                                        最后,恳请各位猿师兄,师姐救救孩子!

推荐阅读