#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上验证对错,请谨慎借鉴。