解题过程的小记录,如有错误欢迎指出。
题目分析
计算A+B的值并按照三位一隔进行输出。
注意点
- 搞清楚int,long long的范围看本题要用什么类型,附一个大佬整理的文章,十分清楚。可以大致的记住int的范围是1010,long long的范围是1019
c++中 int, long long, double 等数据类型的长度及范围整理 - 是从最低位开始三位一隔
我的解题过程
思路
计算出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的代码
全部代码因版权原因不放出来,大家可以自行去柳神博客购买或参考晴神的上机笔记~
借鉴点
- 可以采用以下这种办法进行格式化输出,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);