C语言之基本算法38—格式化输出10000以内的所有完数
2015-07-14 02:41
253 查看
//穷举法!
/*
==================================================================
题目:求10000以内的所有完数,统计数量并以如下格式输出:
28=1+2+4+7+14.
注:完数是除了本身外,其值等于包含1的所有因子之和!
如:28的所有因子是:1,2,4,7,28,除了28外其它因子的和=28,故28是完数!
==================================================================
*/
#include<stdio.h>
#define N 10000
int ws(int a)
{
int i=1;
int sum=0;
while(i<a) //不包含a,因为完数的因子必须小于它本身!
{
if(a%i==0)
sum+=i;
i++;
}
if(sum==a)
return 1;
else return 0;
}
void main()
{
int n=2,i,j,k=0,a[100],shu=0;
printf("%d以内的完数有:",N);
while(n<=N)
{
if(ws(n))
{
for(i=1;i<n;i++)
if(n%i==0)
a[k++]=i;
printf("\n%d: %-4d=%d",shu+1,n,a[0]);
for(j=1;j<k;j++)
printf("+%d ",a[j]);
printf(".\n");
shu++;
k=0;
}
n++;
}
printf("\n一共%d个",shu);
printf("\n");
}
/*
======================================================================
评:
这道题难点在于输出的格式,完数的判断是一个简单问题,甚至可以用for循环来
实现!但是要输出题目要求的格式,就必须先求出其所有因子,保存在预先定义的
数组中,先输出n=a[0],紧接着通过for循环输出其余的+因子,在输出"."。
必须注意要一个一个输出,就是判断+输出+重新初始化后在算下一个n。直到n>N循
环结束(注意不能用for循环,否则会重复输出N次)。
========================================================================
*/
/*
==================================================================
题目:求10000以内的所有完数,统计数量并以如下格式输出:
28=1+2+4+7+14.
注:完数是除了本身外,其值等于包含1的所有因子之和!
如:28的所有因子是:1,2,4,7,28,除了28外其它因子的和=28,故28是完数!
==================================================================
*/
#include<stdio.h>
#define N 10000
int ws(int a)
{
int i=1;
int sum=0;
while(i<a) //不包含a,因为完数的因子必须小于它本身!
{
if(a%i==0)
sum+=i;
i++;
}
if(sum==a)
return 1;
else return 0;
}
void main()
{
int n=2,i,j,k=0,a[100],shu=0;
printf("%d以内的完数有:",N);
while(n<=N)
{
if(ws(n))
{
for(i=1;i<n;i++)
if(n%i==0)
a[k++]=i;
printf("\n%d: %-4d=%d",shu+1,n,a[0]);
for(j=1;j<k;j++)
printf("+%d ",a[j]);
printf(".\n");
shu++;
k=0;
}
n++;
}
printf("\n一共%d个",shu);
printf("\n");
}
/*
======================================================================
评:
这道题难点在于输出的格式,完数的判断是一个简单问题,甚至可以用for循环来
实现!但是要输出题目要求的格式,就必须先求出其所有因子,保存在预先定义的
数组中,先输出n=a[0],紧接着通过for循环输出其余的+因子,在输出"."。
必须注意要一个一个输出,就是判断+输出+重新初始化后在算下一个n。直到n>N循
环结束(注意不能用for循环,否则会重复输出N次)。
========================================================================
*/
相关文章推荐
- C语言之基本算法37—数组最大值及其位置
- C语言之基本算法35—数组上三角之积 主对角之积 副对角之积
- 关于C++中的虚拟继承的一些总结
- C++11时间详解
- 经典游戏的C++实现--2048
- C++对C的扩充
- C语言--程序设计基础1—3章
- 关于C语言中结构体定义的一个小问题
- C++ Primer快速入门之四:变量和数据类型
- POJ 3264
- C++编程基础
- C语言基础学习(1~3)重点复习
- C++入门学习——标准库 string 类的使用
- C++中的return, exit 与 abort 的区别
- Java调用C/C++动态库so
- 【c++】size_t 和 size_type的区别
- C语言指针、地址、赋值三者含义
- 关于C++内存中字节对齐问题的详细介绍
- C中调用C++与C++调用C
- C语言程序设计基础篇