解:方法一。 程序如下:
#define M 1000 //定义寻找范围 #include
——谭浩强 ,《C程序设计(第四版)学习辅导》,清华大学出版社,2010年7月,p43~44
1.
题目本身是错的:
“一个数如果恰好等于它的因子之和”,完数不是这样定义的 “6的因子为1,2,3” ,6的因子还有6 2.
int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10; 这个巨生猛,一口气定义了10个变量,名字也很趣。颇有愚公移山的气概,吃奶的力气都使出来了 为什么偏偏定义10个而不是9个或11个呢?莫名其妙 3.
s=a; //s用来存放尚未求出的因子之和,开始时等于a 实际上s不是注释中所说的含义 赋值为a的做法也非常笨拙 4. if(a%i==0) //如果i是a的因子 {n++; 雷人缩进的风格 5. 6. switch(n) //将找到的因子赋给k1~k9,或k10 {case 1: “将找到的因子赋给k1~k9,或k10 ”,看起来不像中国话 case 1:的位置也很扎眼 7. if(n>1)printf("%d,%d",k1,k2); //n>1表示a至少有2个因子 居然能一口气连写9句if,而且节约,每句只占一行,排列整齐(除了第一句) 看得出作者耐力很好 8. if(n>3)printf(",%d",k4); //n>3表示a至少有4个因子 if(n>4)printf(",%d",k5); //以下类似 原来注释还能这么写,大开眼界 9. 更滑稽的是运行结果 6,Its factors are 1,2,3
28,Its factors are 1,2,4,7,14 496,Its factors are 1,2,4,8,16,31,62,124,248 根本不符合题目的要求 按下面格式输出其因子: 6 ,Its factors are 1 2 3
最新评论