1001. A+B Format

Github_link

  • 解题思路

题目要求将两个数之和输出为国际形式的数字显示,如100000#==> 100,000 。首先本想着不用数组直接用循环把a+b(-1000000<=a,b<=1000000)的代数和result%10输出再result/=10,其中每输出三个插入一个',',循环结束即可。但是逗比地忘了这样实现的是逆序输出,所以就又蛋疼的尝试把逆序改为顺序输出,结果发现越弄越复杂,于是就又回到了用数组实现的想法......

首先先判断result的正负flag,之后把result绝对值化,再将至多拆分成7个数字的result分别赋给 char类型的Array(ps:赋值时对应加上48),循环中的条件判断语句为 if(count%3==0)arr[i++]=','; ,同时需要在输出前判断flag来检查是否需要输出负号,最后输出Array即可。

[Original source code is available on Github](https://github.com/F0UR3r/object-oriented)
  • DEBUG

    测试数据:

      - 1000 1000    	      #==> 2,000       |AC
      - 100000 100000       #==> ,200,000    |WA
      - -1 1                #==>(null)       |WA
    

    本地测试三组数据结果分析:

      - 第二组数据在第十行处的循环中,当第6次temp!=0后 (temp/=10)==0 但是count++使得count从5变为6,从而导致条件为真条件语句执行 arr[i++]=','; ,故最后输出时出现 ,200,000。
      
      - 代码中缺少对result==0的判断
    

    代码修改

      - 将第13行的条件判断修改为if(count%3==0&&temp!=0)...
      - 在第14行插入if(result==0)printf("0");
    

    测试数据:

      - 1000 -1000          #==> 0         |AC
      - 100000 100000       #==> 200,000   |AC
      - 1000000 1000000     #==> 2,000,000 |AC
      - -1000000 -1000000   #==> -2,000,000|AC
    

    尝试了几组典型数据以及代码审计后未发现算法和逻辑错误,尝试提交。

  • PAT提交

    • attempt-1 PAT
原文地址:https://www.cnblogs.com/tr3e/p/5160783.html