一、题目
二、个人理解
此题就是先进行因子的计算,因为必须要判断所有因子和是否等于数字,所以要保存以前的因子,这里我们可以采用数组来进行保存。
C语言:
#include <stdio.h>
#include <string.h>
#define maxn 10000
int main()
{
int m, n, a[maxn], count = 0;
scanf("%d%d", &m, &n);
for (int i = m; i <= n; i++) {
memset(a, 0, sizeof(a)); //这是对数组进行初始化为0
int sum = 0;
for (int j = 1; j < i; j++) {//进行因子的保存
if (i % j == 0) {
a[j] = 1; //值为1的索引即是因子
sum += j; //顺便可以计算因子和
}
}
if (i == sum) { //进行判断
count++; //这是判断有没有,若为0,则输出None
printf("%d = ", i);
int tag = 1;//tag的作用为进行格式化输出
for (int t = 0; t < maxn; t++) {
if (a[t] == 1) {
if (tag) {
printf("%d", t);
tag = 0;
} else {
printf(" + %d", t );
}
}
}
printf("\n");
}
}
if (count == 0) {
printf("None");
}
}