C语言-判断一个数是不是完数

什么是完数?

完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3.(6的因子是1,2,3)

判断一个数是不是完数

#include <stdio.h>
void main()
{
    int n,t,a[10],j=0;
    printf("请输入一个整数");
    scanf("%d",&n); //输入要判断的数字
    t = n;
    for (int i = 1; i < n; ++i) {
        if(n%i == 0){
            a[j] = i; //从1-n的数字里挑,用n取余i,如果余数为0,就是它的因数,把因数存储起来放在a数组中
            j++;//在第一个位置放完数据后在下一个位置存放数据,循环达到把因数全部存储在a数组中的目的
            t = t - i; //相当于用输入的数字以此减去它的因数
            //因为每检查到n的一个因数,if语句里面的代码就会执行一次,j的数值就会加1,和n的因数个数是相同的
        }
    }
    if(t == 0){//判断输入的数字是不是完数
        printf("%d是完数",n);
        printf("%d的所有因数为:",n);
        for (int k = 0; k < j; ++k) {
            printf("%d ",a[k]);
        }
    } else{//如果不是,输出下面的句子
        printf("%d不是完数",n);
    }
}

效果如下:

image-20220925212624331

image-20220925212639098