本文主要是介绍C语言——一个数如果恰好等于不包含它本身所有因子之和,这个数就称为“完数“。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。 编程序找出N之内的所有完数,并按下面格式输出其因子。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
int main()
{int n;int arr[1000];//定义一个数组来存放因子scanf("%d",&n);for(int i=1;i<n;i++){int sum=0;//这里是易错点!!!int k=0;//定义数组的变量for(int j=1;j<i;j++){if(i%j==0){sum+=j;arr[k++]=j;//将每个因子存放在数组中}}if(sum==i){printf("%d its factors are ",i);for(int c=0;c<k;c++)//分别输出每个数的因子{printf("%d ",arr[c]);}printf("\n");}}}
这里重点是要想到运用数组来存放所得的因子,参考了别人的思路,可以先把判断1-n内的完数代码敲出来,再从此基础上进行修改即可。
(记得sum和k进入第一次循环时都要重置为0)
---------------------------------------------------2022.03.06------------------------------------------------------
---------------------------------------------------2022.03.20-------------------------------------------------------
下午睡了个午觉复盘之前的题目时,get到一种新的解法,不采用数组的方法,通过函数实现。
int prime(int n)//判断是否为完数
{int sum=0;for(int i=1;i<n;i++){if(n%i==0)sum+=i;}if(sum==n)return 1;elsereturn 0;
}
int main()
{for(int i=2;i<1000;i++){if(prime(i)==1)//直接判断,是的话相除得到的数一定是他的何{printf("%d = 1",i);//1是所有共有的for(int j=2;j<i;j++){if(i%j==0)printf("+%d",j);//这样子不用判断最后一个数不加+号}printf("\n");}}
}
两种方法各有好处,个人觉得第二种更便于理解。
这篇关于C语言——一个数如果恰好等于不包含它本身所有因子之和,这个数就称为“完数“。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。 编程序找出N之内的所有完数,并按下面格式输出其因子。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!