首页 > 技术文章 > 《面向对象程序设计》第二次作业(一)

vayhang-E-airshiner 2016-02-09 00:03 原文

ps:这里小提一句,我选用的Mac端Markdown工具是Mou,亲测不错,有需要的同学可以的同学可以下载来试试。

Mou icon

好了,回归正题,现在开始解决这次作业的编程题。



1001. A+B Format (20)

git仓库中的题目与解答

解题过程:

  • 分析:

这道题目和最初遇到的 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。

推荐阅读