PTA(6-3):使用函数输出指定范围内的完数

首先看看题目:本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。

再看看题目的格式要求:

PTA(6-3):使用函数输出指定范围内的完数

小白的我也是经过万般努力,虽然程序上有点繁琐,但是还是实现了

#include <stdio.h>

int factorsum( int number );
void PrintPN( int m, int n );
int factorsum1(int nubmer);
    
int main()
{
    int i, 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;
}


int factorsum(int nubmer)\\返回完数
{
    int i,sum=0;
    
    for(i=1;i<=10000;i++)
    {
        sum=sum+i;
        if(nubmer==sum) 
        {
            return sum;
            
        }
    }
    return 0;
}

int factorsum1(int nubmer)\\返回完数最后一个因子i(目前考虑的一种方法)
{
    int i,sum=0;
    
    for(i=1;i<=10000;i++)
    {
        sum=sum+i;
        if(nubmer==sum) 
        {
            return i;
            
        }
    }
    
}


void PrintPN(int m,int n)
{
    int i,j;
    if (m>0&&m<n&&n<10000)
        for(i=m;i<=n;i++)
        {
            if(factorsum(i)==i)
            {
                printf("%d=",factorsum(i));    
                for(j=1;j< factorsum1(i) ;j++)
                {
                    printf("%d+",j);
                }
                printf("%d",j);
                printf("\n");
            }
        }
}

最终结果:

PTA(6-3):使用函数输出指定范围内的完数

这是一个只掌握了教材内容写出来的程序,我想应该是有更简单的算法的,我们来看看别人的算法,学习借鉴一下:

看了许多的版本,发现用什么语言的都用,仔细一看,虽然都是求完数,但是各种要求的都有,所以目前还是按找这个写法来吧,如果有更好的写法,我会更新的,敬请期待。