黑马程序员技术交流社区

标题: 学渣跟你一起学"完数" (附详细注释) 大家一起努力 [打印本页]

作者: fenxite    时间: 2015-11-3 18:08
标题: 学渣跟你一起学"完数" (附详细注释) 大家一起努力
学渣跟你一起学"完数" (附详细注释) 大家一起努力
题目:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。编程找出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;
}

作者: xiaobei    时间: 2015-11-3 18:13
看着好复杂啊,学习学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2