首先看看题目:本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。
再看看题目的格式要求:
小白的我也是经过万般努力,虽然程序上有点繁琐,但是还是实现了
#include <stdio.h>
int factorsum( int number );
void PrintPN( int m, int n );
int factorsum1(int nubmer);
int main()
{
int i, m, n;
scanf("%d %d", &m, &n);
if ( factorsum(m) == m ) printf("%d is a perfect number\n", m);
if ( factorsum(n) == n ) printf("%d is a perfect number\n", n);
PrintPN(m, n);
return 0;
}
int factorsum(int nubmer)\\返回完数
{
int i,sum=0;
for(i=1;i<=10000;i++)
{
sum=sum+i;
if(nubmer==sum)
{
return sum;
}
}
return 0;
}
int factorsum1(int nubmer)\\返回完数最后一个因子i(目前考虑的一种方法)
{
int i,sum=0;
for(i=1;i<=10000;i++)
{
sum=sum+i;
if(nubmer==sum)
{
return i;
}
}
}
void PrintPN(int m,int n)
{
int i,j;
if (m>0&&m<n&&n<10000)
for(i=m;i<=n;i++)
{
if(factorsum(i)==i)
{
printf("%d=",factorsum(i));
for(j=1;j< factorsum1(i) ;j++)
{
printf("%d+",j);
}
printf("%d",j);
printf("\n");
}
}
}
最终结果:
这是一个只掌握了教材内容写出来的程序,我想应该是有更简单的算法的,我们来看看别人的算法,学习借鉴一下:
看了许多的版本,发现用什么语言的都用,仔细一看,虽然都是求完数,但是各种要求的都有,所以目前还是按找这个写法来吧,如果有更好的写法,我会更新的,敬请期待。