C语言循环结构题 ,不知道怎么写😭😭

img


不知道如何在满足sum=sum+a循环结束后,满足sum=n,但是把每次循环的a都输出

#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);
    }
}