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
思路:
我想的这个思路有点傻瓜,就是将输入的两个数加起来,记录ans是正数还是负数,取ans绝对值然后从个位数开始将每一位存入vector中。当ans 小于1000的时候直接输出ans就行。当ans>1000的时候,需要用vector的长度除以3得到余数,然后用长度减去3*余数,这样就可以知道是否存在不足3个元素的group(也就是最前面是否要单独输出1到2个数)。后面依次倒着输出vector中的单个元素并且补上逗号即可。代码可能有些冗余,但是如果将int换成long long那么可以应用到更大数的加法,结果也是对的,不限于题目所限定的数据范围。
代码:
#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int a, b, ans = 0;
vector<int>num;
bool flag = true;
scanf_s("%d %d", &a, &b);
ans = a + b;
if (ans < 0)
flag = false;
ans = abs(ans);
int temp = 0, dot = 0, frontNum = 0,number=ans;
while (number != 0)
{
temp = number % 10;
number = number / 10;
num.push_back(temp);
}
dot = num.size() / 3;
//if(dot>=1)
frontNum = num.size() - dot * 3;
int len = num.size() - 1;
if (flag == false)
printf_s("-");
//if (ans < 1000)
// printf_s("%ld", ans);
if (ans < 1000)
printf_s("%d", ans);
else {
if (frontNum != 0) {
while (frontNum != 0)
{
printf_s("%d", num[len]);
frontNum--;
len--;
}
printf_s(",");
}
//else printf_s("%ld", ans);
for (int i = 0; i < dot; i++)
{
for (int j = 0; j < 3; j++)
{
printf_s("%d", num[len]);
len--;
}
if (i < dot - 1)
printf_s(",");
}
}
return 0;
}