zoukankan      html  css  js  c++  java
  • 第二次作业之编程题

    1、Github的链接:

    https://github.com/mingyueanyao/object-oriented.git

    2、解题的思路过程:

    因为开始做题的时间比较晚,多少看到了大家的讨论,所以在做题之前就知道要注意按要求输出,也就是每隔三位要求输出一个逗号,就像学生计算器上的那样,怎么按要求输出应该就是这题的关键了。又因为曾经做过一个幸运数的题目(大致是说若一个数各个数位之和是素数,那么它就是一个幸运数),当时就需要求出各个数位上的数从而得到数位之和,所以我就想把 a+b的结果的各个数位存到一个数组里,这样循环输出数组元素的时候就可以加入输出逗号的操作。此外晚做题的我还注意到要小心结果有可能是负值,因为今天才稍微看慕课计划的我(刚开始计划里c语言的复习那部分)发现取余运算的符号取决于被除数,要是a+b是负的,那我数组元素就都是负的了吧。

    3、具体操作(编写代码):

    看到同学的博客,试着开始加上一些注释。

    第一次尝试:

    • 代码1.0:

      #include<stdio.h>
      int main ()
      {
          int a,b,c,d[7],i=0,j=0;
          scanf("%d %d",&a,&b);
          c=a+b;                    //将a+b的结果存到c里,便于操作。
          if(c==0) printf("%d",c);  //实际操作发现也要考虑这一情况(打到while语句循环条件时)。
          else
          {
              if(c<0)
              { 
                  c=-c;                
                  printf("-");      //对结果是负值的操作。
              }
      
              while(c>0)
              {
                  d[i]=c%10;
                  c=c/10;
                  i++; 
                  j++;             
              }                     //将非零结果绝对值上的的各个数位存入数组中,并记录数位个数。
          }
          for(i=0;i<j;i++)
          {
              if((i+1)%3==0)printf(",");  //输出逗号的操作。
              printf("%d",d[i]);          //逐个输出数位上的数。
          }
          return 0;
       }
      
    • 样例调试结果:

    • 分析:因为数位是从个位开始存的,所以输出数位的时候应该倒着输,还有逗号的输出也要相应的作调整。

    第二次尝试:

    (经过一番修改,跳过期间的各种小错误:无限循环、逗号多输、逗号输错...)

    • 代码2.0:

        #include<stdio.h>
        int main ()
        {
            int a,b,c,d[7],i=0;
            scanf("%d %d",&a,&b);
            c=a+b;                    //将a+b的结果存到c里,便于操作。
            if(c==0) printf("%d",c);  //实际操作发现也要考虑这一情况(打到while语句循环条件时)。
            else
            {
                if(c<0) 
                {
                    c=-c;                
                    printf("-");      //对结果是负值的操作。
                }
                while(c>0)
                {
                    d[i]=c%10;
                    c=c/10;
                    i++;              
                }                     //将非零结果绝对值上的的各个数位存入数组中,并记录数位个数。
            }
            for(;0<i;i--)
            {
                printf("%d",d[i-1]);          //逐个输出数位上的数。
                if((i-1)%3==0&&i-1>0)printf(",");  //输出逗号的操作。
            }
            return 0;
         }
      
    • 样例调试结果:

    • 分析:感觉虽然代码写得不是很高明,但是又调式了几次的结果都没错,于是我决定先交一次试试。

    4、上交过程:

    截图一:

    • 分析:选错语言而导致出错,以下为改为c语言的评测结果。

    截图二:

    • 分析:全部通过,还好没有意料之外的其他错误。
  • 相关阅读:
    NOI 2016 区间 解题报告
    有关莫队
    [JSOI2008]最大数 线段树解法
    HDU P3341 Lost's revenge 题解+数据生成器
    BZOJ P1212 [HNOI2004] L语言
    洛谷P3168 [CQOI2015]任务查询系统
    普通平衡树Tyvj1728、luogu P3369 (splay)
    洛谷P3384 树链剖分
    BZOJ P2157 旅游
    【算法导论】第6章,堆排序
  • 原文地址:https://www.cnblogs.com/mingyueanyao/p/5169988.html
Copyright © 2011-2022 走看看