1001. A+B Format
-
解题思路
题目要求将两个数之和输出为国际形式的数字显示,如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
- attempt-1
文中有误之处望各位大牛斧正!