• 面向对象程序设计第二次作业(1)


    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 果然太久没有用,有的都忘记掉了。花了点时间找到以前学的东西再看了看,还是有点收获的。
  • 相关阅读:
    1.第一个java程序
    5.第三章 运算符和基本选择结构
    7.关系运算符
    4.第二章章末总结
    3.计算员工工资
    JAVA并发操作——Thread常见用法(Sleep,yield,后台线程)
    JAVA 对象序列化(一)——Serializable
    JAVA 线程中的异常捕获
    JAVA反射机制实例
    JAVA 对象序列化(二)——Externalizable
  • 原文地址:https://www.cnblogs.com/HBING/p/5170931.html
Copyright © 2020-2023  润新知