【c语言】函数练习:找到两个数之间的所有完数

今天继续练习!!今天想多搞一下链表,所以做了一个比较简单的题目,不过我觉得这个题虽然简单,但是很经典,我学到不少呢!今天也要加油!!!!ヾ(◍°∇°◍)ノ゙

题目:

任何一个自然数的约数中都有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;
}

希望可以帮到看这篇文章的您,祝您也有快乐的一天了!!✿✿ヽ(°▽°)ノ✿✿✿ヽ(°▽°)ノ✿

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值