#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int count = 0,nums[1001];
int sum = 0;
for(int i = 1;i <= n / 2;i++){
if(n % i == 0){
nums[count] = i;
sum += i;
count++;
}
}
if(sum == n){
printf("Yes,its factors are ");
for(int i = 0;i < count;i++){
printf("%d ",nums[i]);
}
}else{
printf("No");
}
}
sum变量没有初始化啊
放数组里呀
或者执行两次,第一次先判断有没有结果,如果有结果,第二次循环再真正打印
可以把判断是否为完数和输出所有因子的操作封装成两个函数。就像下面的代码一样。
你也可以把因子保存到一个数组里面,如果是完数就输出这个数组否则就不输出。
#include <stdio.h>
void JudgePerfectNumber(int number_);
void PrintNumberFactory(int number_);
int main() {
int num = 0;
scanf("%d", &num);
JudgePerfectNumber(num);
return 0;
}
void JudgePerfectNumber(int number_) {
int sum = 0;
for (int i = 1; i <= number_ / 2; ++i) {
if (number_ % i == 0)
sum += i;
}
if (sum == number_)
PrintNumberFactory(number_);
else
printf("No");
}
void PrintNumberFactory(int number_) {
printf("Yes,its factory are ");
for (int i = 1; i <= number_ / 2; ++i) {
if (number_ % i == 0)
printf("%d ", i);
}
}