PAT甲级 1001 A+B Format C++语句
题目
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 Specification:
Each input file contains one test case. Each case contains a pair of integers a and b where
(−10∧6)<=a,b<=(10∧6 ) . The numbers are separated by a space.
Output Specification:
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
思路
题目要求计算两个数的和并输出,但是如果位数每过三个则需要加上一个逗号做分隔符。显然按字符串的方法输出是最简单的。我们可以循环取和的绝对值最后一位,转成对应的字符压入字符栈中,每压入三个就压入一个逗号,最后根据和的正负选择是否压入负号。
特殊情况是和为0,直接输出。
代码
#include<iostream>
#include<stack>
#include<math.h>
using namespace std;
void print_sum(int n)
{
if (n == 0)
{
cout << 0; return;
}
bool negative ;//判断正负
stack<char>sum;
int flag=0;//记录压入字符个数
if (n < 0)
negative = true;
else
negative = false;
n = abs(n);
while (n != 0)
{
char temp = n % 10+ 48;//转换数字成对应的字符
sum.push(temp);
n = n / 10;
flag++;
if (flag == 3&&n!=0)
{sum.push(','); flag = 0; }
}
if (negative)
sum.push('-');
while (!sum.empty())
{
char temp = sum.top();
sum.pop();
cout<< temp;
}
}
int main()
{
int a, b;
cin >> a>>b;
int sum = a + b;
print_sum(sum);
return 0;
}