今天继续练习!!今天想多搞一下链表,所以做了一个比较简单的题目,不过我觉得这个题虽然简单,但是很经典,我学到不少呢!今天也要加油!!!!ヾ(◍°∇°◍)ノ゙
题目:
任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数。 如6的所有真约数是1、2、3,而且6=1+2+3。像这样,一个数所有真约数的和正好等于这个数,通常把这个数叫做完美数。 古希腊人非常重视完美数。毕达哥拉斯发现它之后,人们就开始了对完美数的研究。 现在要求输出所有在m和n范围内的完美数。
输入:
输入只有一行,是两个整数,(2<=m<=n<=32767),中间用空格隔开。
输出:
输出范围内的所有完全数的计算表达式,数与数之间用空格隔开。
案例:
输入:
1 10
输出:
6=1+2+3
代码如下:
#include <stdio.h>
void perfect(int a,int b)
{
int c[1000],sum=0,flag=1,t=0;
for(int i=a;i<=b;i++)
{
sum=0;t=0;
for(int j=1;j<i;j++)//最值得学习的应该是i,j的灵活运用
{
if(i%j==0)
{
sum+=j;
c[t++]=j;//我觉得比较有趣的写法,里面放了++
}
}
if(sum==i&&i>0)
{
flag=0;
printf("%d=1+",sum);//这里从1开始是为了覆盖多出来的“+”号
for(int k=1;k<t;k++)
{
printf("+%d",c[k]);
}
printf("\n");
}
}
if(flag)//flag的用法也值得记忆
printf("NULL");
}
int main()
{ int a,b;
scanf("%d%d",&a,&b);
perfect(a,b);
return 0;
}
希望可以帮到看这篇文章的您,祝您也有快乐的一天了!!✿✿ヽ(°▽°)ノ✿✿✿ヽ(°▽°)ノ✿