您的位置:首页 > 其它

1001. A+B Format

2016-01-26 16:17 218 查看
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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: