浙大版《C语言程序设计(第3版)》题目集 习题6-3 使用函数输出指定范围内的完数 (20分)
程序员文章站
2022-06-08 17:57:57
...
#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");
}