题目翻译
1001: A+B的格式化
计算a+b并以标准形式输出和,所谓标准形式就是,除少于四个数字的情况以外,这些数字必须分成三组,每组之间用一个逗号隔开。
输入格式
每个输入文件包含一个测试样例,每个样例包含一对整数a和b,a和b的取值范围为(-106,106)。两个数之间用一个空格分隔。
输出格式
对于每一个测试样例,输出的和占一行,和的格式按照上述的标准格式书写。
样例
1 | -1000000 9 |
1 | -999,991 |
题目分析
输入两个整数求和很简单,用空格隔开的两个整数的读入只需要利用c++的输入流cin就能轻松完成。问题的难点在于从个位开始每隔三个数字加上一个逗号。如果得到的和是一个字符串,就能够很容易解决这个问题了。因此问题转化为将int型的数字转化成string型的字符串。
在c++11标准中有std::to_string()可以实现从int到string类型的转化,调用格式是:1
string str = std::to_string(int n);
如果编译器不支持C++11标准,那么可以使用stringstream类完成,使用它要在头文件中包含”sstream”。具体原理可以参考:@cplusplus.com。使用方法如下,以int转string为例:1
2
3
4
5
6
7
8
/*** codes ***/
int num = 12345;
stringstream tmp;
tmp << num;
string str;
stringstream >> str;
/*** codes ***/
理解起来,stringstream类就像一个来者不拒的熔炉,它将传入的int型参数num读入到字符串缓冲区,重塑后输出到字符串型变量中。从string型到int型的转化同理。
得到字符串类型的变量后,下一步就是每隔三个字符,插入一个逗号,这一操作用之前介绍过的string类的成员函数insert()来完成。此外还需要注意的是,因为有可能出现刚好符号和最高位之间可以插入一个逗号的情况,所以对于负数和正数要分开处理,先去掉符号进行转化和插入符号,再在输出前添上符号。
代码
1 |
|
踩坑指南
最后,在解决这个问题的时候,我本以为输出格式应该是int型常量和字符串常量相交织的情况。比如样例中的“-999,991”,我以为应该是依次输出(char)’-‘和(int)999和(char)’,’和(int)991,这样一来问题变得异常复杂,不过仍然是一个可解的问题,等有时间再来探索。
转载请注明来源:©Tinshine