1、Github的链接:
2、解题的思路过程:
因为开始做题的时间比较晚,多少看到了大家的讨论,所以在做题之前就知道要注意按要求输出,也就是每隔三位要求输出一个逗号,就像学生计算器上的那样,怎么按要求输出应该就是这题的关键了。又因为曾经做过一个幸运数的题目(大致是说若一个数各个数位之和是素数,那么它就是一个幸运数),当时就需要求出各个数位上的数从而得到数位之和,所以我就想把 a+b的结果的各个数位存到一个数组里,这样循环输出数组元素的时候就可以加入输出逗号的操作。此外晚做题的我还注意到要小心结果有可能是负值,因为今天才稍微看慕课计划的我(刚开始计划里c语言的复习那部分)发现取余运算的符号取决于被除数,要是a+b是负的,那我数组元素就都是负的了吧。
3、具体操作(编写代码):
看到同学的博客,试着开始加上一些注释。
第一次尝试:
-
代码1.0:
#include<stdio.h> int main () { int a,b,c,d[7],i=0,j=0; scanf("%d %d",&a,&b); c=a+b; //将a+b的结果存到c里,便于操作。 if(c==0) printf("%d",c); //实际操作发现也要考虑这一情况(打到while语句循环条件时)。 else { if(c<0) { c=-c; printf("-"); //对结果是负值的操作。 } while(c>0) { d[i]=c%10; c=c/10; i++; j++; } //将非零结果绝对值上的的各个数位存入数组中,并记录数位个数。 } for(i=0;i<j;i++) { if((i+1)%3==0)printf(","); //输出逗号的操作。 printf("%d",d[i]); //逐个输出数位上的数。 } return 0; }
-
样例调试结果:
-
分析:因为数位是从个位开始存的,所以输出数位的时候应该倒着输,还有逗号的输出也要相应的作调整。
第二次尝试:
(经过一番修改,跳过期间的各种小错误:无限循环、逗号多输、逗号输错...)
-
代码2.0:
#include<stdio.h> int main () { int a,b,c,d[7],i=0; scanf("%d %d",&a,&b); c=a+b; //将a+b的结果存到c里,便于操作。 if(c==0) printf("%d",c); //实际操作发现也要考虑这一情况(打到while语句循环条件时)。 else { if(c<0) { c=-c; printf("-"); //对结果是负值的操作。 } while(c>0) { d[i]=c%10; c=c/10; i++; } //将非零结果绝对值上的的各个数位存入数组中,并记录数位个数。 } for(;0<i;i--) { printf("%d",d[i-1]); //逐个输出数位上的数。 if((i-1)%3==0&&i-1>0)printf(","); //输出逗号的操作。 } return 0; }
-
样例调试结果:
-
分析:感觉虽然代码写得不是很高明,但是又调式了几次的结果都没错,于是我决定先交一次试试。
4、上交过程:
截图一:
- 分析:选错语言而导致出错,以下为改为c语言的评测结果。
截图二:
- 分析:全部通过,还好没有意料之外的其他错误。