C语言程序设计——1000以内的完数

时间:2025-02-09 07:21:12

C语言程序设计(第五版)——谭浩强  P137页

9题: 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下列格式输出其因子

 6 its factors are 1、2、3

这道题有两个难点:第一如何循环,第二如何输出。

在第一次做的时候就格式也不对,一直想不出如何才能输出。(可见如下代码)

#include<>
#include<>
int main()
{
	int i,j,t,k;
	for(i=1;i<1000;i++)
	{
       t=0;
		for(j=1;j<i;j++)
	   {
		   if(i%j==0)
	          t+=j;
	   }
		if(t==i)
	  printf("%d its factora are\n",i);
	    for(k=1;k<i;k++)
	   {
		if(i%k==0)
			printf("%d",k);
	   }
	   printf("\n");		 
	}
	system("pause");
	return 0;
}

后面经过调整代码如下

#include<>
#include<>
int main()
{
	int i,j,t,k;
	for(i=1;i<1000;i++)
	{
       t=0;//用来验证该数是否为完数
		for(j=1;j<i;j++)
	   {
		   if(i%j==0)
	          t+=j;
	   }
		if(t==i)
		{
	  printf("%d its factors are ",i);
	    for(k=1;k<i;k++)
	   {
		if(i%k==0)
		{
			printf("%d,",k);
		}
		}
	   printf("\b \n");	//保证输出格式正确	 
	}
}
	system("pause");
	return 0;
}

这个代码,可能对于刚学循环的小白来讲有点复杂,我们拆开来讲。

part 1 我们先看前半段包含第一和第二个for循环

for(i=1;i<1000;i++)
	{
       t=0;
		for(j=1;j<i;j++)
	   {
		   if(i%j==0)
	          t+=j;
	   }

 第一个for定义了一个i,主要用于循环数字1-999,找出1000以内的完数。

t=0,用于将所有可以被除了自身以外,小于自身的因子相加是否等于这个数,判断这个数是否为完数。

part 2

       if(t==i)
		{
	  printf("%d its factors are ",i);
	    for(k=1;k<i;k++)
	   {
		if(i%k==0)
		{
			printf("%d,",k);
		}
		}
	   printf("\b \n");		 
	}

if(t==i)主要目的是将完数输出---printf("%d its factors are ",i);

后面第三个for,又用到了另外一个for,主要是将该完数的因子逐个输出。(注意输出格式)

因为格式原因要在第二个for结束之前加一个 printf("\b \n"); 主要是用于格式与题目一致