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 −10exp(6)≤a,b≤10exp(6). 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
题目分析:
首先,输入两个数字,对数字的大小有着限制,然后标准输出数字之和。例如-999,991,从最低位开始,每三位输出一个“,”;
代码示例:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string itos(int a)
{
stringstream s;
s << a;
return s.str();
}
int Test_1001(void)
{
string s;
int a, b;
int c;
cin >> a >> b;
c = a + b;
s = itos(c);
for (int i = 0; i<s.length(); i++)
{
cout << s[i];
if (s[i] == '-')continue;
if ((i + 1) % 3 == s.length() % 3 && i != s.length() - 1)cout << ',';
}
cout << endl;
return 0;
}
思路分析:
1.首先获取输入,求数字之和;
cin >> a >> b;
c = a + b;
2.因为你输出的需要穿插‘,’;所以可以把输出转换为字符串:
s = itos( c );
具体实现:
string itos(int a)
{
stringstream s;
s << a;
return s.str();
}
这里相当创建一个string类型的数据流,将int型数据输入到string流中,返回其string类型。
3.整个程序最重要的部分在这里:
for (int i = 0; i<s.length(); i++)
{
cout << s[i];
if (s[i] == '-')continue;
if ((i + 1) % 3 == s.length() % 3 && i != s.length() - 1)cout << ',';
}
主要思路是:首先从string s[0]开始遍历输出,这里s[0]输出的是最高位或是‘-’;并且‘-’并不在你考虑范围内:每三位输出一个‘,’的形式。
重点是这个判断条件:if ((i + 1) % 3 == s.length() % 3 && i != s.length() - 1);
为什么会有(i+1)% 3 == s.length() % 3这个判断条件呢?假如当你有一个11位数,所以s.length() % 3 =2,因为我们的输出从0到s.length()-1依次是从最高位输出的11,111,111,111.在最高位留下两位,所以从最高位输出,只要1%3==2,我们就打印“,”;
完: