1001. A+B Format

本文介绍了“A+B”问题的两种解决方案。一种是通过数组存储每位数字并按需输出,适用于深入了解数值处理过程;另一种则利用标准输出格式简化代码,更加高效简洁。文章对比了两种方法的特点,适合初学者理解不同编程思想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A+B Format

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;
}

参考

ITEYE博客 - wq611403

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值