A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学渣跟你一起学"完数" (附详细注释) 大家一起努力
题目:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。编程找出999以内的所有完数。
#include<stdio.h>

int main(){
   
        static int k[10];                     //定义一个数组用于依次储存完数的每个因子
        int n,num;
        for(int i=2;i<1000;i++){                  //for循环遍历 由完数定义可知1~999的完数应从2开始
            n=-1;
            num=i;
            for(int j=1;j<i;j++){                //for循环遍历 除数j,应小于i 范围 1~i
                if((i%j)==0){                    //判断除数j能否被 被除数i整除 此处是为找出i所有因子
                  n++;                           //能整除则数组系数n加1
                  num=num-j;                     // 被除数num(之前赋值num=i)减去除数j 得新的被除数 再进行次运算
                                                  //因为完数等于它的因子之和,用完数num减去他所有的因子应该刚好为0
                                                 //例如: 6/1=6 余数为0 此时 第一轮 num=6 j=1  num=6-1=5,
                                                 //       第二轮: 6/2=3 余数为0 num=5 j=2  num=5-2=3
                                                //       第二轮: 6/3=3 余数为0 num=5 j=3  num=3-3=0
                    k[n]=j;                     // 依次储存完数的每个因子
                }
            }
            if(num==0){                         //num最后剩余是否为0,为0则是完数.因为完数等于它的因子之和,用完数num减去他所有的因子应该刚好为0
            printf("%d 是完数其因子为:",i);       //输出判断出的完数i
                for(int z=0;z<=n;z++)            //for循环遍历从0~n
                    printf("%d,",k[z]);          //打印每个因子
                printf("\n");                    //输出换行
            }
        }
        return 0;
}

评分

参与人数 1黑马币 +2 收起 理由
耀阳圣尊 + 2

查看全部评分

1 个回复

倒序浏览
看着好复杂啊,学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马