您的位置:首页 > 职场人生

自己动手丰衣足食之完数_黑马程序员

2015-11-03 20:32 197 查看
 
/** 测试题
 *   一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3. 编程找出999以内的所有完数。(C语言)
 */
思路分析:“完数”定义为:一个数如果恰好等于它的因子之和。可推知用完数减去他所有的因子应该刚好为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

#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

k
=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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言