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上的提交记录列表截图

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

浙公网安备 33010602011771号