史上最笨拙最丑陋结果又最滑稽的C代码
6 ,Its factors are 1 2 3
程序如下:
#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表示a至少有3个因子 if (n>3) printf ( ",%d" ,k4); //n>3表示a至少有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; } |
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
附:因子的定义
假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子。 需要注意的是,唯有被除数,除数,商皆为整数,余数为零时,此关系才成立。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架