2022-11-08 习题6-3 使用函数输出指定范围内的完数

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int factorsum(int number);

void PrintPN(int m, int n);

int main()

{

    int m, n;

    scanf("%d %d", &m,&n);

    if (factorsum(m) == m) printf("%d is a perfect number\n", m);

    //if (factorsum(m) != m)printf("%d is not 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 number)

{

    int a = 1;int sum = 0;

    for (int i = 2;i <= number / 2;i++)

    {

        a = number % i;

        while (a == 0) {

            sum += number / i;

            break;

        } 

    }  if (sum == number-1)

        {

            return number;

        }

    return 0;

}

void PrintPN(int m, int n)

{

    for (int i = m;i <= n;i++)//遍历m→n

    {

        while (factorsum(i) == i)//m-》n查找完数

        {

            printf("1");

            for (int u = i-1;u > 1;u--)//逆序找出完数的因子

            {

                if (i%u == 0)

                {

                    int c = i / u;

                    printf("+%d", c);

                }

            }

            printf("=%d\n", i);

            break;     

        }

    }

}

原题地址:题目详情 - 习题6-3 使用函数输出指定范围内的完数 (pintia.cn)

自己缝缝补补做了两节实验课共八十多分钟,这道题跟水仙花类似但是比水仙花数简单一点,可以遍历输出不用创建数组,花了很长很长的时间,但比起自己第一次做水仙花数用了四个小时真的进步了很多!希望能再接再厉。

主要导致做题时间长的问题有:

1.变量名重复导致值改变,还没找出原因。

2.for循环的次数不熟悉,会弄错。


输出的答案与实际相同

注:此题没有在pta上验证对错,请谨慎借鉴。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容