题目
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
题目大意
求a和b的和,并输出,每三位输出一个逗号。
思路
一看到题目就想到把和的每一位拆分存进数组,再按序进行判断输出,负号的情况要单独讨论。结果做出来是可行的,要注意的是要考虑sum=0的特殊情况。
后来觉得题目这么短,怎么代码这么长,很难受,就网上查了一下,果不其然,和别人的一比自己写的真的是low B······主要还是C基础没学好,对输出的格式语句没有深入研究过,下简要记录一下权当学习了:
%d 正常输出
%3d 指定宽度,不足的左边补空格
%-3d 左对齐输出
%03d 指定宽度,不足的左边补0
代码实现Ⅰ
#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b, sum;
int flag = 0; // flag用来判断sum是否为负数
int arr[10]; // 存放各位数字及逗号
int count = 0; // 位数计数
int i = -1; // 数组下标及长度
scanf("%d %d", &a, &b);
sum = a + b;
if (sum < 0)
{
flag = 1;
sum = abs(sum);
}
/*sum = 0特殊情况*/
if(sum == 0)
{
printf("0");
return 0;
}
/*数组创建*/
while (sum != 0)
{
if (count == 3)
{
arr[++i] = -1; // 若为逗号存-1
count = 0;
}
else
{
arr[++i] = sum % 10;
++count;
sum /= 10;
}
}
/*输出*/
if (flag)
{
printf("-");
flag = 0;
}
for (int j = i; j >= 0; --j)
{
if (arr[j] == -1)
{
printf(",");
continue;
}
else
printf("%d", arr[j]);
}
return 0;
}
代码实现Ⅱ
#include <stdio.h>
int main()
{
int a, b;
int sum;
while (scanf("%d%d\n", &a, &b) != EOF) {
sum = a + b;
if (sum < 0) {
printf("-");
sum = -sum;
}
if (sum >= 1000000){
printf("%d, %03d, %03d\n", sum / 1000000, (sum / 1000) % 1000, sum % 1000);
}
else if (sum >= 1000) {
printf("%d, %03d\n", sum / 1000, sum % 1000);
} else {
printf("%d\n", sum);
}
}
return 0;
}
参考