完美数的判断

/*
题目描述
一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
编程序找出N之内的所有完数,并按下面格式输出其因子
输入
N
输出
? its factors are ? ? ?
样例输入
1000
样例输出
6 its factors are 1 2 3
28 its factors are 1 2 4 7 14
496 its factors are 1 2 4 8 16 31 62 124 248
*/
#include<stdio.h>
#define SIZE 100 // 100 个空间足够存放一个完美数的所有因子了
enum bool{ fales, ture };//由于bool类型用不了,我也不知道为什么 -_-||| 所以这里就枚举出来吧, 也可以返回 1 和 0 代替
// 第一步:判断是不是完美数
int isFactors(int factors);
//第二步:找出完美数的所有因子
void findFactors(int factors);
//第三步:输出这个完美数和他的所有因子
void printFactors(int *factors, int thisfactors);
int main(){
    int factors;
    scanf("%d", &factors);
    int i;
    for (i = 6; i <= factors; i++){ //由于最小的完美数是 6 ,我们直接从 6 开始找吧 -_-|||
        if (isFactors(i)){ 
            findFactors(i);
        }
    }
    return 0;
}
//第一步:判断是不是完美数
int isFactors(int factors){
    int sum = 1; // 所有完美数必有因子 1 ,所有先把他累加
    int i;
    for (i = 2; i < factors; i++){
        if (factors % i == 0)
            sum += i;
    }
    if (sum == factors)
        return ture;
    else
        return fales;
}
//第二步:找出完美数的所有因子
void findFactors(int factors){
    int theFactors[SIZE] = { 0 }; //先把所有元素初始化为 0 
    int i, k;
    theFactors[0] = 1; // 所有完美数的因子中必定有一个是 1 ,我们这里直接先把他存入数组吧
    for (i = 2, k =1; i < factors; i++){ // 因子中 1 是必有的,那么我们就可以直接从 2 开始找吧
        if (factors % i == 0)
            theFactors[k++] = i;
    }
    //输出这个完美数和所有因子
    printFactors(theFactors, factors);
}
//第三步:输出这个完美数和所有因子
void printFactors(int *factors, int thisfactors){
    int i;
    printf("%d its factors are", thisfactors);
    for (i = 0; factors[i] != 0; i++){ //由于一开始数组的初始化元素为 0 , 所以这里直接输出他不为 0 的数据即可
        printf(" %d", factors[i]);
    }
    printf("\n");
}

 

posted @ 2023-04-06 09:41  ha_1007  阅读(169)  评论(0)    收藏  举报