使用函数输出指定范围内的完数
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。输入
输出
样例输入
1 30
样例输出
1 is a perfect number
1 = 1
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
程序代码:#include<stdio.h>
#include<stdlib.h>
int fun(int n,int a[])//n为所求数据
{
int i=2,k=1,j=1;//i从2开始//k为求和//j为记录数组下标
if (n==1)//考虑特殊情况
return 0;
for (;i<=n/2;i++)//比较到n/2就行了~
if (n%i==0)
{
k+=i;//求和
a[j++]=i;// 保存数据
}
return k;
}
void print(int a[],int num)
{
int i,j;
printf("%d=",num);
for (i=0;a[i];++i)
printf("%d+",a[i]);
printf("\b \n");
}
int main()
{
int n,m,i,j,a[100]={0};//保存完数的数组
a[0]=1;
scanf("%d%d",&m,&n);//输入数据
if (m==1)
printf("1=1\n");
for (i=m;i<n+1;i++)
{
if (i==fun(i,a))//
print(a,i);
memset(a,0,sizeof(a));//数组重置
a[0]=1;//初始化
}
return 0;
}
