输出1-1000以内的完数遇到问题

输出1-1000以内的完数遇到问题
我想对1-1000以内的数进行操作,
如果是完数,则输出:如6 its factors are 1,2,3.
如果不是完数,则输出:如2,no
但是输出的结果是一大片空白,到了840这个数才输出840,no,想知道原因,求大lao帮忙解答,谢谢!

#include
int iswanshu(int n);
void showfactors(int n);
int maxfactor(int n);
int main()
{
    int i;
    for(i=2;i<1001;i++)
    {
        if(iswanshu(i))
        {
            printf("%d its factors are ",i);
            showfactors(i);
        }
        else printf("%d,no\n",i);
    }

    return 0;
}
int iswanshu(int n)
{
    int i;
    int s=0;
    for(i=1;iif(n%i==0) s+=i;
    }

    if(s==n) return 1;
    else return 0;

}
int ismaxfactor(int n)
{
    int i;
    for(i=n-1;i>=1;i--)
    {
        if(n%i==0)
        {
            return 1;
        }

    }

}
void showfactors(int n)
{
    int i;
    for(i=1;iif(n%i==0)
        {
            printf("%d",i);
            if(!ismaxfactor(n)) printf(",");
            if(ismaxfactor(n)) printf(".\n");
        }

    }
}

根据您提供的代码,我发现问题出在ismaxfactor函数中。该函数没有返回值,而在showfactors函数中使用了该函数的返回值作为判断条件,导致程序出错。您可以将ismaxfactor函数的返回类型改为int类型,并在函数末尾加上return 0;语句来解决这个问题。另外,您在showfactors函数中的一些语句也可以进行简化。修改后的代码如下:


#include<stdio.h>

int iswanshu(int n);
void showfactors(int n);
int ismaxfactor(int n);

int main()
{
    int i;
    for(i=2;i<1001;i++)
    {
        if(iswanshu(i))
        {
            printf("%d its factors are ",i);
            showfactors(i);
        }
        else printf("%d, no\\n",i);
    }

    return 0;
}

int iswanshu(int n)
{
    int i;
    int s=0;
    for(i=1;i<n;i++)
    {
        if(n%i==0) s+=i;
    }

    if(s==n) return 1;
    else return 0;
}

int ismaxfactor(int n)
{
    int i;
    for(i=n-1;i>=1;i--)
    {
        if(n%i==0)
        {
            return 1;
        }
    }
    return 0;
}

void showfactors(int n)
{
    int i;
    for(i=1;i<n;i++)
    {
        if(n%i==0)
        {
            printf("%d",i);
            if(!ismaxfactor(n)) printf(",");
        }
    }
    printf(".\\n");
}

        if(ismaxfactor(n)) printf(".\n");

空白是这里产生的,调试下

参考GPT和自己的思路:

问题出现在函数ismaxfactor中。当n为1时,for循环直接跳过,函数没有返回值,导致程序出现未知错误,产生大量的空白输出。解决方法是给ismaxfactor函数加上一个默认的返回值0。

修改后的代码如下: