c程序设计第四版谭浩强
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are
方法1【c源程序】
#define M 1000 /*定义寻找范围*/
#include <stdio.h>
int main()
{
int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
int i,a,n,s;
for (a=2;a<=M;a++) /* a是2-1000之间的整数,检查它是否完数 */
{n=0; /* n用来累计a的因子的个数 */
s=a; /* s用来存放尚未求出的因子之和,开始时等于a */
for (i=1;i<a;i++) /* 检查i是否a的因子 */
if (a%i==0) /* 如果i是a的因子 */
{n++; /* n加1,表示新找到一个因子 */
s=s-i; /* s减去已找到的因子,s的新值是尚未求出的因子之和 */
switch(n) /* 将找到的因子赋给k1...k9,或k10 */
{case 1:
k1=i; break; /* 找出的笫1个因子赋给k1 */
case 2:
k2=i; break; /* 找出的笫2个因子赋给k2 */
case 3:
k3=i; break; /* 找出的笫3个因子赋给k3 */
case 4:
k4=i; break; /* 找出的笫4个因子赋给k4 */
case 5:
k5=i; break; /* 找出的笫5个因子赋给k5 */
case 6:
k6=i; break; /* 找出的笫6个因子赋给k6 */
case 7:
k7=i; break; /* 找出的笫7个因子赋给k7 */
case 8:
k8=i; break; /* 找出的笫8个因子赋给k8 */
case 9:
k9=i; break; /*找出的笫9个因子赋给k9 */
case 10:
k10=i; break; /* 找出的笫10个因子赋给k10 */
}
}
if (s==0)
{
printf("%d ,its factors are ",a);
if (n>1) printf("%d,%d",k1,k2); /* n>1表示a至少有2个因子 */
if (n>2) printf(",%d",k3); /* n>2表示至少有3个因子,故应再输出一个因子 */
if (n>3) printf(",%d",k4); /* n>3表示至少有4个因子,故应再输出一个因子 */
if (n>4) printf(",%d",k5); /* 以下类似 */
if (n>5) printf(",%d",k6);
if (n>6) printf(",%d",k7);
if (n>7) printf(",%d",k8);
if (n>8) printf(",%d",k9);
if (n>9) printf(",%d",k10);
printf("\n");
}
}
return 0;
}
方法2【c源程序】
#include <stdio.h>
int main()
{int m,s,i;
for (m=2;m<1000;m++)
{s=0;
for (i=1;i<m;i++)
if ((m%i)==0) s=s+i;
if(s==m)
{printf("%d,its factors are ",m);
for (i=1;i<m;i++)
if (m%i==0) printf("%d ",i);
printf("\n");
}
}
return 0;
}
本文链接:http://www.wb98.com/c/post/tanhaoqiang_5.9.html
本站文章搜索: