https://github.com/Fleurrr/object-oriented
解题的思路过程
看到这道题目,首先想到的是分为两种情况讨论:第一种是和值小于999且大于-999的情况,这类情况不需要输出“,”,所以直接输出结果即可;第二种情况是和值大于999或者是小于-999的情况,该题应该主要讨论的是第二种情况。在第二种情况下,因为输出的值中可能含有“,”或者是“-”这类字符,所以我认为这道题的结果应该是用字符串的形式来输出,而出于简洁的考虑,当和值为负数时我选择先将负号消除,在最后选择将负号加上。最重要的部分来了:给输出的结果加上逗号,本来是想用for语句来进行循环的,但是心想输出结果的字符长度不一定,所以改用while语句来循环比较方便。如果是负数的话,只要在最后输出时加上一个负号即可。大致思路就是这个样子。
编码过程中调试与上线测试(提交代码)后的bug发现与修改过程
一开始根据自己的思路写出来的代码是这样的
#include <stdio.h>
int main()
{
int a,b,s,flag=0;
char result[20];
scanf("%d %d",&a,&b);
s=a+b;
if(s>999||s<-999)
{
if(s<0)
{
flag=1;
s=s*(-1);
}
int n=1,i=0;
while(s>0)
{
result[i++]=s%10+48;
if(n%3==0)
result[i++]=',';
s=s/10;
n++;
}
if(flag==1)
{
result[i++]='-';
}
for(i>=0;i--;)
{
printf("%c",result[i]);
}
printf("
");
}
if(s<=999&&s>=-999)
{
printf("%d
",s);
}
return 0;
}
似乎是部分错的样子,可能是第二次循环的语句的问题,所以干脆将第二次的循环语句也改成了while语句
#include <stdio.h>
int main()
{
int a,b,s,flag=0;
char result[20];
scanf("%d %d",&a,&b);
s=a+b;
if(s>999||s<-999)
{
if(s<0)
{
flag=1;
s=s*(-1);
}
int n=1,i=0;
while(s>0)
{
result[i++]=s%10+48;
if(n%3==0)
result[i++]=',';
s=s/10;
n++;
}
if(flag==1)
{
result[i++]='-';
}
while(i>=0)
{
printf("%c",result[i--]);
}
printf("
");
}
if(s<=999&&s>=-999)
{
printf("%d
",s);
}
return 0;
}
结果一模一样的部分错误,所以我开始在编译器里一次一次调试代码发现错误,将判断是否需要加上“,”的那段代码稍微修正了一下,并且发现最后改成else就可以解决部分错误,但是不知道为什么输出结果前面会有一个小空格?
#include <stdio.h>
int main()
{
int a,b,s,flag=0;
int n=1,i=0;
char result[20];
scanf("%d %d",&a,&b);
s=a+b;
if(s>999||s<-999)
{
if(s<0)
{
flag=1;
s=s*(-1);
}
while(s>0)
{
result[i++]=s%10+48;
if(n%3==0)
result[i++]=',';
s=s/10;
n++;
}
if(flag==1)
{
result[i++]='-';
}
while(i>=0)
{
printf("%c",result[i--]);
}
printf("
");
}
else
{
printf("%d
",s);
}
return 0;
}
最后在同学的帮助下完成了最后的代码
#include <stdio.h>
int main()
{
int a,b,s,n=1,i=0,flag=0;
char result[20];
scanf("%d %d",&a,&b);
s=a+b;
if(s>999||s<-999)
{
if(s<0)
{
flag=1;
s=s*(-1);
}
while(s>0)
{
result[i++]=s%10+48;
if(n%3==0&&s/10!=0)
result[i++]=',';
s=s/10;
n++;
}
if(flag==1)
result[i++]='-';
result[i--]=' ';
while(i>=0)
{
printf("%c",result[i--]);
}
printf("
");
}
else
{
printf("%d
",s);
}
return 0;
}
在PAT上的提交记录列表截图