zoukankan      html  css  js  c++  java
  • 面向对象程序设计第二次作业(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 果然太久没有用,有的都忘记掉了。花了点时间找到以前学的东西再看了看,还是有点收获的。
  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/HBING/p/5170931.html
Copyright © 2011-2022 走看看