自己动手丰衣足食之完数_黑马程序员
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;
}
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享