《面向对象程序设计》第二次作业(一)
ps:这里小提一句,我选用的Mac端Markdown工具是Mou,亲测不错,有需要的同学可以的同学可以下载来试试。
好了,回归正题,现在开始解决这次作业的编程题。
1001. A+B Format (20)
解题过程:
- 分析:
这道题目和最初遇到的 A+B problem 很像,只是要求两数相加的和每三个数必须用逗号分隔,所以输出有所不同,因为位数比较小,所以这道题需要考虑的情况比较简单。
- 难点:
要分成三种情况一到三位数、四到六位数、七到九位数;负数情况下的符号处理;三个数连成一组时如果不是三位要用0补齐等。
- 实现:
先判断正负数,负数情况打印符号后取相反数;先判断相加之后的和的位数,然后分情况决定逗号分隔情况;0的补全用%03d处理。
- 举例:
以七到九位数的情况位例子,三个部分的数字分别用 总和被1000000除、总和被1000除后对1000取余、总和对1000取余。
- 测试数据:
test1 | test2 | test3 |
---|---|---|
-735135 | 651 | 161651 |
-533645 | 864 | -933454 |
实际代码:
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
c=a+b;
//printf("%d ",c); <----就是被这行坑了一次WA
if (c<0) {
c=-c;
printf("-");
}
if (c>999999)
{
printf("%d,%03d,%03d",c/1000000,(c/1000)%1000,c%1000);
}
else if (c<=999)
{
printf("%d",c);
}
else
{
printf("%d,%03d",c/1000,c%1000);
}
return 0;
}
测试结果: AC
- 插曲:一开始在编译器中检查结果时,代码中有一行用于检验的代码,输出没有逗号隔开的原始的和的数字,提交的时候忘记注释掉,结果全WA了,吓了自己一跳,回来再用数据测试时才发现结果多了这个不该有的东西,注释掉后AC。