A+B Format

1001. A+B Format (20)

https://github.com/leijing000/object-oriented

一、解题的思路过程:

首先我写出两个数求和的代码,接着我试着测试出这个和的长度,即这个数总共有几个数字,好用于后面的分组,于是我采用了数组,并采用取余取整的循环,每循环一次所定义的j变量(j的初始值为0)就加一,直到最后余数为零时所得到的j-1便是和的长度,并把每次取得的余数赋值给c[j],这样就得到一个含这个和的每个数字的数组,然后我试图将它分成三个一组,于是我找到每个逗号前的数字所对应的j的序号,发现那个j是可以被3整除的,于是我在j%3的余数为0的地方接着输入一个逗号,这样便实现了三个一组的输出,输出数字和逗号我想通过循环来实现的,并且是倒序输出。

二、编码过程中调试与上线测试(提交代码)后的bug发现与修改过程:

一开始我以为仅是简单的a+b,于是便写了一个只有五六行的算加法的代码,提交上去后发现是错的,于是我认真看了题目,题目不仅仅是要我们算两个数的和,还要将结果按三个一组并用逗号隔开输出,于是我便思考着如何把这个数分组,并把逗号塞在中间,于是我写出了这样一段代码:

#include<stdio.h>
int main()
{
    int a,b,sum,d=0,j=0;
    int c[10000]={0};
    scanf("%d%d",&a,&b);
    sum=a+b;
    while(sum>0)
	    {
	    c[j]=sum%10;
	    sum=sum/10;
	    j++;
	    d++;
    }
    for(j=d;j>=0;j--)
	    {
		    printf("%d",c[j]);
	    if(j%3==0)
		    printf(",");
    }
    return 0;

当我输入负数测试时它的输出是不对的,因此我觉得负数是需要单独讨论的,而且当我输出正数时虽然输出是有逗号的,但是在最末尾也有一个逗号,这就说明我在判断逗号的时候条件不够充足,使得最后一个逗号也输出了。

于是我开始第二次尝试,我分了和小于0和和大于等于0两种情况讨论,并思考为什么最后面会有逗号,我发现当j为0时除3也为0(即输出最后一个数时会出现逗号的原因),所以我增加了一个j不等于0的条件。

#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,sum,d=0,j=0,n;
    int c[10000]={0};
    scanf("%d%d",&a,&b);
    sum=a+b;
    n=abs(sum);
    while(n>0)
    {
	    c[j]=n%10;
	    n=n/10;
	    j++;
	    d++;
    }
    if(sum>=0)
    {
    for(j=d;j>=0;j--)
	    {
		    printf("%d",c[j]);
	    if(j%3==0&&j!=0)
		    printf(",");
    }
    }
    else
    {
	    printf("-");
	    for(j=d;j>=0;j--)
	    {
		    printf("%d",c[j]);
	    if(j%3==0&&j!=0)
		    printf(",");
    }
    }
    return 0;
}

修改后的输出还是有问题,我发现输出的和的前面多了一个0,若我的数组没有初始化为0的话,则会多出一堆的随机数,因此我感觉是我的范围出错了,使得输出多了一个数,于是我将j从d开始改成d-1,这样输出就正确了。

再次提交后发现还是有问题,我尝试了好几次发现输出都是正确的,不管是正的还是负的。后来仔细想想,我没有测试过和为0的情况。于是我试着输出和为0的情况,发现当和为0时是没有输出的,所以我便又把和为0单独的考虑了,经过多次修改终于全对了。

三、在PAT上的提交记录列表截图

原文地址:https://www.cnblogs.com/leijing/p/5167860.html