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).
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
题目大意
计算a+b并以标准格式输出总和,标准格式就是数字必须用逗号分成三个一组(除非少于四个数字)。
代码与思路
思路一
将a+b的结果存入字符型数组中,再逆序输出。和为0的时候特殊处理一下。主要用取余运算和除法运算。
#include<iostream>
#include<typeinfo>
#include<cmath>
using namespace std;
int main()
{
int sum, a, b, tag = 1, i = 0;
char s[20];
cin >> a >> b;
sum = a + b;
while (sum)
{
if (tag < 4)
{
s[i] = abs(sum % 10) + '0';
/*cout << typeid('0').name()<< endl; //输出数据类型名
cout << typeid(abs(sum % 10)).name()<< endl;
cout << typeid(abs(sum % 10) + '0').name()<< endl;
cout << typeid(s[i]).name() << endl;*/
tag++;
sum = sum / 10;
}
else
{
s[i] = ',';
tag = 1;
}
i++;
}
if (a + b == 0)
cout << 0;
else if (a + b < 0)
cout << '-';
for (int j = i - 1; j >= 0; j--)
{
cout << s[j];
}
cout << endl;
return 0;
}
思路二
将结果转换成字符串(包括符号),当前位满足(i + 1)%3==len % 3且不是最后一位,就在其后面输出逗号。因为是从右往左标逗号,但是输出的时候是从左往右输出,所以(i+1)%3==len%3时,就在后面输出逗号。比如一个5位数,在下标为1的数字后面就要输出逗号。(参考了柳神的代码)
主要用到<string>里面to_string()函数,将a,b之和转换成string类型。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
string sum = to_string(a + b);
int len = sum.length();
for (int i = 0; i < len; i++)
{
cout << sum[i];
if (sum[i] == '-') continue; //如果没有这条if判断,则会在负号后面也有一个逗号即-1000000 1 输出-,999,999 显然是不合要求的
if ((i + 1) % 3 == len % 3 && i != len - 1)
cout << ',';
}
return 0;
}