问题
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
解决方法
string
分析:字符串处理
对于如果和为负,先输出符号,再对剩余的字符串进行处理。
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
string str;
string s = to_string(a + b);
if (s[0] == '-')
{
cout << s[0];
s.erase(0, 1);
}
reverse(s.begin(), s.end());
for (int i = 0; i < s.size(); i++)
{
if (i % 4 == 3)s.insert(i, ",");`在这里插入代码片`
}
reverse(s.begin(), s.end());
cout << s;
return 0;
}
参考柳神思路
#include<iostream>
#include<string>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
string s = to_string(a + b);
int len = s.size();
for (int i = 0; i < s.size(); i++)
{
cout << s[i];
if (s[i] == '-') continue;
if ((i + 1) % 3 == len % 3&&i!=(len-1)) cout << ",";
}
return 0;
}
vector
#include<iostream>
#include<string>
using namespace std;
int main() {
int N, M, flag = 0, len, count = 0;
scanf("%d %d", &N, &M);
string s = to_string(N + M);
string s1;
if (s[0] == '-') { flag = 1;s.erase(s.begin()); }
len = s.length();
for (int i = len - 1; i >= 0; i--) {
s1.push_back(s[i]);
count++;
if (count % 3 == 0&&i!=0)s1.push_back(',');
}
if (flag)s1.push_back('-');
for (int i = s1.length() - 1; i >= 0; i--)printf("%c", s1[i]);
return 0;
}
后记
字符串的题目,难度不大。值得注意的是对负号的处理。