GitHub
题目及要求
1001. A+B Format (20)
Calculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).
Input:Each input file contains one test case. Each case contains a pair of integers a and b where -1000000 <= a, b <= 1000000. The numbers are separated by a space.
Output:For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.
Sample Input
-1000000 9
Sample Output
-999,991
解题思路
刚开始看到此题的确头大,只是因为它是英文的,后来仔细阅读了街边题目对照着实例,我理解了题目的意思。我第一反应就是这道题要通过除法和求余把sum分为三个一组,沿着这个思路,我又考虑了几种应该有的情况。
首先是正负问题,通过abs函数解决,最终输出时再考虑正负。
其次是范围问题,这应该是这道题的关键,经过计算过后,我把它分为了三个区间,一是小于1000的数可以直接输出,二是大于等于1000小于1000000的数,三是大于等于1000000的数。
最后是具体的除法和求余过程,第二种情况可以除以1000求前三位,求余1000求后三位,第三种情况除以1000000求第一位,除以1000求余1000求下面三位,求余1000求最后三位。最终我还是忽略了输出中0的显现问题,经过调试得以输出正确结果。
调试过程
代码1
这段代码是第一次打的,试了几个结果,发现结果中0的显现有问题
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,sum,x,y,z;
scanf("%d %d",&a,&b);
sum=abs(a+b);
if(sum<1000)
{
if(a+b>0||a+b==0)printf("%d",sum);
else printf("%d",-sum);
}
else if(sum>1000000||sum==1000000)
{
x=sum/1000000;
y=sum/1000%1000;
z=sum%1000;
if(a+b>0||a+b==0)printf("%d,%d,%d",x,y,z);
else printf("%d,%d,%d",-x,y,z);
}
else
{
x=sum/1000%1000;
y=sum%1000;
if(a+b>0||a+b==0)printf("%d,%d",x,y);
else printf("%d,%d",-x,y);
}
return(0);
}
代码2
这次我首先在格式声明里加一个3,发现没用,经过思考之后又在3之前加0,试了几个数字,发现果然行的通,之后在pat上提交一次全部ac,挺激动的。
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,sum,x,y,z;
scanf("%d %d",&a,&b);
sum=abs(a+b);
if(sum<1000)
{
if(a+b>0||a+b==0)printf("%d",sum);
else printf("%d",-sum);
}
else if(sum>1000000||sum==1000000)
{
x=sum/1000000;
y=sum/1000%1000;
z=sum%1000;
if(a+b>0||a+b==0)printf("%d,%03d,%d",x,y,z);
else printf("%d,%03d,%03d",-x,y,z);
}
else
{
x=sum/1000%1000;
y=sum%1000;
if(a+b>0||a+b==0)printf("%d,%03d",x,y);
else printf("%d,%03d",-x,y);
}
return(0);
}