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).
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.
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
计算a+b的值并按照要求输出:每三位加上符号','
把a+b转化为字符串,如-1000000009,那么从右向左每三个数字后面输出',',关键在于如何定位到需要输出','的位置。
对于这个字符串,字符串长度len = 11,在下表index = 1,4,7的位置后有逗号‘,’,也就是我们是从右向左数第4,7,10的位置,从右向左第3个位置也就是 右边位置的index-左边位置的index=3 的位置,右边位置下标就是len-1,也就是说 (len -1)-index1 == 3 ,index1就是我们从右向左第一个后面加逗号的位置,同理(len -1) - index2 == 6 .....
等号右边都是3的倍数,因此可以写成(len-1-index ) %3 == 0,但是由于 0%3 ==0,所以在最后一个位置后面也会出现逗号,因此需要排除此条件,index != len-1
综上所述得出index的条件是 ( (len-1-index)%3==0 && index!= len-1)
接下来我们开始写代码又发现一个问题,那么如何将数字转化成字符串呢?
注意!头文件:#include < sstream?>
????long long a, b;
? ? cin >> a >> b;
? ? stringstream str;//定义一个stringstream类的str
? ? str << a + b;//a+b流入str
? ? string s;
? ? str >> s; //str中的a+b流向s,就实现了类型转化
注意!头文件:#include < string >
????long long a, b;
? ? cin >> a >> b;
? ? string s = to_string (a+b);
#include <bits/stdc++.h>
using namespace std;
int main() {
long long a, b;//使用long long避免范围不够
cin >> a >> b;
stringstream str;
str << a + b;
string s;
str >> s;
/*
或者
? ? string s = to_string (a+b);
*/
int len = s.size();//或者int len = s.length(),两个效果相同
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == '-') { //遇到负号跳过不判断就行
continue;
}
else {
if ((len-i-1)%3==0 && i != len - 1) {
cout << ',';
}
}
}
return 0;
}