使用函数输出指定范围内的完数

这个是题目:

img

img

这个是我的代码


int factorsum( int number )
{
    int i=0,n=number,sum=1;
    for(i=2;iif(n%i==0)
        {
            sum+=i;
        }
    }
    return sum;    
}
void PrintPN( int m, int n )
{
    int i=0,sum=0,c=0;
    if(i==1)
    {
      printf("No perfect number");  
    }
    else
    {
    for(i=m;i<=n;i++)
    {
        if( factorsum(i) == i )
        {
            printf("%d = 1",i);
            for(int j=2;jif(i%j==0)
                {
                    printf(" + %d",j);
                    c++;
                }
            }
            printf("\n");
            c++;
        }
    } 
    if(c==0)
    {
        printf("No perfect number");
    }
    }
}

请问我写的哪里错误了呢?提交的时候显示部分正确 谢谢

17行,if(i==1)不对吧,应该是if(n==1)

修改如下,供参考:

#include <stdio.h>
int factorsum(int number)
{
    int i = 0, n = number, sum = 1;
    if (number <= 1)     //排除 1 不是完数
        return 0;
    for (i = 2; i < n; i++)
    {
        if (n % i == 0)
        {
            sum += i;
        }
    }
    return sum;
}
void PrintPN(int m, int n)
{
    int i = 0, sum = 0, c = 0;
    //if (i == 1)
    //{
    //    printf("No perfect number");
    //}
    //else
    //{
    for (i = m; i <= n; i++)
    {
        if (factorsum(i) == i)
        {
            printf(c++ == 0 ? "%d = 1" : "\n%d = 1", i);
            for (int j = 2; j < i; j++)
            {
                if (i % j == 0)
                {
                    printf(" + %d", j);
                    //c++;
                }
            }
            //printf("\n");
            //c++;
        }
    }
    if (c == 0)
    {
        printf("No perfect number");
    }
    //}
}
int main()
{
    int m, n;
    scanf("%d %d", &m, &n);
    if (factorsum(m) == m)
        printf("%d is a perfect number\n", m);
    if (factorsum(n) == n)
        printf("%d is a perfect number\n", n);
    PrintPN(m, n);
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632