【PAT甲级】1001 A+B Format (20分)

解题过程的小记录,如有错误欢迎指出。

题目分析

计算A+B的值并按照三位一隔进行输出。

注意点

  1. 搞清楚int,long long的范围看本题要用什么类型,附一个大佬整理的文章,十分清楚。可以大致的记住int的范围是1010,long long的范围是1019
    c++中 int, long long, double 等数据类型的长度及范围整理
  2. 是从最低位开始三位一隔

我的解题过程

思路

计算出A+B的值并直接取绝对值,然后转化为字符串看长度是否需要隔开输出,再分别输出。

bug

因为没有考虑不需要隔开输入的<4位的数字的负号输出,所以卡了一会(憨憨挠头)【乱bb:题目本身还是简单的也没有什么坑,看了下也是PAT甲级里面做的总数最多的了,果然大家一开始都是很认真的(笑)】

代码

#include<iostream>
#include<string>
#include<math.h>

using namespace std;

int main()
{
	long a, b;
	string r1, r2 = "";
	cin >> a >> b;
	r1 = to_string(abs(a + b));
	if (r1.length() < 4) { //*******这里没有考虑到负号的输出
		if (a + b < 0) {
			cout << "-";
		}
		cout << r1 << endl;
	}
	else {
		if (a + b < 0) {
			cout << "-";
		}
		int j = 0;
		for (int i = r1.length() - 1; i >= 0; i--) {
			r2 = r1[i] + r2;
			if (++j % 3 == 0&&i != 0&&j) {
				r2 = "," + r2;
			}
		}
		cout << r2 << endl;
	}
    return 0;
}

dalao的代码

全部代码因版权原因不放出来,大家可以自行去柳神博客购买或参考晴神的上机笔记~

借鉴点

  1. 可以采用以下这种办法进行格式化输出,printf在格式化输出的时候很方便
if (c >= 1000000) printf("%d,%03d,%03d", c / 1000000, c % 1000000 / 1000, c % 1000);//%03d 的0不要忘了写
else if (c >= 1000) printf("%d,%03d", c / 1000, c % 1000);
else printf("%d", c);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值