使用函数输出指定范围内的完数
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数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; }