欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浙大版《C语言程序设计(第3版)》题目集 习题6-3 使用函数输出指定范围内的完数 (20分)

程序员文章站 2022-06-08 17:57:57
...

浙大版《C语言程序设计(第3版)》题目集 习题6-3 使用函数输出指定范围内的完数 (20分)

#include <stdio.h>
int factorsum(int number);
void PrintPN(int m, int n);
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 number)
{
    int sum, i;
    sum = 0;
    if (number == 1)
        sum = 1; // 完全数1
    else
        for (i = 1; i <= number / 2; i++) // 只要到number/2就行,因为因子不可能超过数的一半。
            if (number % i == 0)
                sum += i;
    return sum;
}
void PrintPN(int m, int n)
{
    int i, j, flag;
    flag = 0; // 存在完数标1,不存在标0.
    for (i = m; i <= n; i++)
    {
        if (factorsum(i) == i)
        {
            flag = 1;
            printf("%d = ", i); // 输出完数。
            if (i == 1)
                printf("1");
            else
                for (j = 1; j <= i / 2; j++) // 输出因子。
                    if (i % j == 0)
                    {
                        printf("%d", j);
                        if (j < i / 2)
                            printf(" + "); // 完数一定可以对半除,所以到一半之前都要添' + '。
                    }
            printf("\n");
        }
    }
    if (!flag)
        printf("No perfect number\n");
}