1001.A+B Format(20)

1001.A+B Format(20)

---本题GitHub链接
https://github.com/leolkx123/object-oriented

解题思路

因为首次接触这种以英文为题型的题目,一开始很不适应。当我第一次阅读这个题目的时候,因为没有看懂the digits must be separated into groups of three by commas (unless there are less than four digits).,就把这个当做四舍五入了。。。(也不知道为什么这么蠢)后来仔细看才发现这是让我们每隔3个数字加一个“,”,除非这个数小于4位数。

总之,就是在数字为4,7位数的时候,在第3、第4和第6、第7位数加一个逗号(题目要求-1000000 <= a, b <= 1000000。所以a+b最大为2000000,最小为-2000000,不用考虑7位数以上更高位的数)

编码过程中调试与上线测试(提交代码)后的bug发现与修改过程

第一次提交的时候发现不是四舍五入。。。所以发现了题目理解错误。第二次提交的时候其实跟我最近一次提交的代码完全相同,是正确的。但是,由于第一次使用PAT,它的默认语言是AWK,而不是C。所以第二次,评测系统依旧给我全错。

这是我第二次的代码

#include<stdio.h>
#include<math.h>
int main()
{
  int a,b,sum,thousand,million,billion,r;
  scanf("%d%d",&a,&b);
  sum=a+b;
  if(abs(sum)<1000)printf("%d",sum);
  if(abs(sum)>=1000&&abs(sum)<1000000)
  {
    thousand=sum/1000;
    r=sum%1000;
    printf("%d,%d",thousand,abs(r));
  }
  if(abs(sum)>=1000000)
  {
    thousand=sum/1000;
    million=thousand/1000;
    thousand=thousand-million*1000;
    r=sum%1000;
    printf("%d,%d,%d",million,abs(thousand),abs(r));
  }
  return 0;
 } 

因为没有发现错误原因是语言不匹配造成的,所以就一直在找自己代码的错误。第三次代码没有用math.h,进行了改进,

#include<stdio.h>
int main()
{
  int a,b,sum,thousand,million,billion,r;
  scanf("%d%d",&a,&b);
  sum=a+b;
  if(sum<0)
  {
      printf("-");
      sum=-sum;
  }
  if(sum>=1000000)
  {
    thousand=sum/1000;
    million=thousand/1000;
    thousand=thousand-million*1000;
    r=sum%1000;
    printf("%d,%03d,%03d\n",million,thousand,r);
  }
  if(sum>=1000)
  {
    thousand=sum/1000;
    r=sum%1000;
    printf("%d,%03d\n",thousand,r);
  }
  if(sum<1000)printf("%d\n",sum);
  return 0;
 }

但是果然还是全错。终于错了10次之后,在反复确认自己的代码没问题的时候,终于发现了语言不匹配Orz...

在PAT上的提交记录列表截图


这也算是一种惨烈的教训吧。。。毕竟耗费了我大量的时间。但是也是给我提供了改进代码的机会就是了。

posted @ 2017-01-26 22:58  sungam  阅读(173)  评论(3)    收藏  举报