题目描述:
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.
输入样例:
-1000000 9
输出样例:
-999,991
我的思路:
给出的数据都在int的范围内,故先直接计算出结果,再用字符串进行处理。注意0、负数、逗号的特殊处理。
负数:先保存符号,将数变为其相反数之后在处理
0:直接输出0即可
逗号:从右往左数,每三个数字一个逗号,且数字最前边无逗号
我的代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string numToStr(int ans){
string temp,answer;
if(ans<0){//若结果为负数,变为其相反数,存储逗号
ans=-ans;
temp='-';
}else if(ans==0){//结果为0,直接输出0
answer='0';
return answer;
}
int cnt=0;//记录当前是第几位
while(ans){
cnt++;
answer+=ans%10+'0';
ans/=10;
if(cnt%3==0&&ans!=0){//最前边不能有逗号
answer+=',';
}
}
//answer中高位存储结果的低位,故需将其反转
reverse(answer.begin(),answer.end());
return temp+answer;//若为负数,temp='-',若为正数,temp为空
}
int main(){
int a,b;
string answer;
cin>>a>>b;
int ans=a+b;
answer=numToStr(ans);
cout<<answer;
return 0;
}