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"); 主要是用于格式与题目一致