1001. A+B Format(20)
1、 问题描述
2、 解题的思路过程
- 首先 A+B 并没有什么难度,重要的是输出数据的格式需要注意,题目要求输出的数字必须用逗号分隔开来。
- 由于题目规定的 a 和 b 的范围较小,a+b 的总和在 -2,000,000 到 2,000,000 之间。我将正数输出情况分成三种:
<1> a+b < 1,000
<2> 1000 <= a+b < 1,000,000
<3> 1,000,000 <= a+b
- 负数情况以此类推。
3、 编码过程中调试与上线测试(提交代码)后的bug发现与修改过程
-
想好之后就写了一段代码,并且随便输了几个数试验了一下发现结果符合。代码如下:
#include<stdio.h> int main() { int a, b; int sum = 0; int y, z; scanf ("%d%d", &a, &b); sum = a + b; z = sum % 1000; sum /= 1000; if (sum == 0) printf("%d\n", z);// sum < 1,000 else { y = sum % 1000; sum /= 1000; if (sum == 0) printf("%d,%d\n", y, z);// 1,000 <= sum < 1,000,000 else printf("%d,%d,%d\n", sum, y, z);//sum >= 1,000,000 } return 0; }
-
sum<0 的情况最开始是傻傻的判断sum的正负情况,if(sum>0) 用上面的代码,else 的时候把原先的代码复制一遍,然后在每个 printf 的 “ ” 最前面一个个添 - 号
((# ̄~ ̄#)真是要被自己蠢哭了) 。自己输数据的时候还发现输出了-0 这个错误。 -
当我很愉快的去提交的时候,没有注意到编译器不对。测试结果“返回非零”,真是百思不得其解。结果抬头一看,发现编译器不对……
-
改好编译器再次上交的时候发现只有“部分正确”。自己又去跑去测了几组数据,发现当sum大于1,000的时候,被“,”分隔开的部分会出现不足三位的情况,这种情况下应当补零。改了一下输出的格式说明就愉快的对啦~
不算优化的优化 -
总觉得这样的题目写出来的代码不应该太长,特别是正负那边应该用点什么一下子就能搞定了。
-
脑袋灵光一现,大笔一挥把原来加的if和else都删掉。在求出sum之后添加了如下代码:
if (sum < 0) { printf("-"); sum = -sum; }
-
改完之后果然整个页面比原来清楚了好多!!
-
-
最终代码 #include<stdio.h> int main() { int a, b; int sum = 0; int y, z; scanf ("%d%d", &a, &b); sum = a + b; if (sum < 0) { printf("-"); sum = -sum; } z = sum % 1000; sum /= 1000; if (sum == 0) printf("%d\n", z);// sum < 1,000 else { y = sum % 1000; sum /= 1000; if (sum == 0) printf("%d,%03d\n", y, z);// 1,000 <= sum < 1,000,000 else printf("%d,%03d,%03d\n", sum, y, z);//sum >= 1,000,000 } return 0; }
4、 在PAT上的提交记录列表截图
5、 作业小结
- 题目不算难,不过刚开始做题的时候考虑的还是不够周到,没有考虑到需要补零的情况。以后做题的时候会尽量多测试一些数据,尽可能考虑到多方面的可能。
- 把文件上传到github用的时间比写代码的时间翻了不知道多少倍
(# ̄~ ̄#) ,然而最后还是没怎么搞懂git。虽然最后用了别的方法上传了文件,但是还是会再花点时间研究研究git。 - 看到markdown可以兼容html就顺便复习复习之前学过的一点点html和css,
o(一︿一+)o 果然太久没有用,有的都忘记掉了。花了点时间找到以前学的东西再看了看,还是有点收获的。