PAT甲级 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).
输入
Each input file contains one test case. Each case contains a pair of integers a and b where
1
0
−
6
<
=
a
,
b
<
=
1
0
6
10^{-6} <= a,b <= 10^{6}
10−6<=a,b<=106.The numbers are separated by a space.
输出
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.
思路
首先将a+b得到c,因为要格式化,所以把c转化为字符串(sprintf),之后我们每隔3个添加一个逗号,因为是从末尾开始数,我们可以用栈存每一次的值和逗号,判断是否加逗号就看当前值是否是3.
代码
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<stack>
using namespace std;
char ans[100] = { 0 };
int main()
{
int a, b;
cin >> a >> b;
int c = a + b;
if (c < 0)
{
printf("-");
c = -c;
}
sprintf(ans, "%d", c);
int n = strlen(ans);
stack<char> s;
int k = 0;
for (int i = n - 1; i >= 0; i--)
{
// 放在开头判断以防多打一个
if (k == 3)
{
s.push(',');
k = 0;
}
s.push(ans[i]);
k++;
}
while (!s.empty())
{
printf("%c", s.top());
s.pop();
}
cout << endl;
}
(文主只是想学习的时候分享心得,代码能力不强,勿喷)