题目来源:PAT (Advanced Level) Practice
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 −106≤a,b≤106. 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
words:
Calculate 计算,打算 commas 逗号
题意:
求给定数a和b的和,并用标准格式输出,即每三位数字用逗号分隔开来;
思路:
1. 先计算a和b的sum;
2. 然后判断sum是否为负数,若是则用flag标记一下,并取相反数;若不是再判断是否为0,若是则直接输出0;
3. 从个位开始取sum的数字,取到的数字放在字符串s中,每取三位加一个逗号;
4. 输出符号(负数输出 ‘-’,正数不用输出)和字符串s即可;
#include <iostream>
using namespace std;
#include <algorithm>
int main()
{
int a,b,sum;
string s; //用字符串保存最终的标准格式输出结果
cin>>a>>b;
sum=a+b; //求和
bool flag=false; //标记是否为负数
if(sum<0) //和小于0
{
flag=true;sum=-sum; //首先输出一个符号(先输出到字符串s中,并非直接输出),然后转化为正数
}
else if(sum==0) //和等于0
s='0'; //输出0
for(int k=1;sum!=0;k++) //求正数部分的标准格式输出
{
if(k%4==0) //每三位数字加一个逗号,即算上逗号可理解为每四位一个逗号,除非小于四位
{
s=','+s;
k++; //表示位数
}
s=to_string(sum%10)+s;
sum/=10;
}
if(flag) cout<<"-"; //负数
cout<<s<<endl;
return 0;
}