题目描述:
-
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
-
输入:
-
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
-
输出:
-
请计算A+B的结果,并以正常形式输出,每组数据占一行。
-
样例输入:
-
-234,567,890 123,456,789 1,234 2,345,678
-
样例输出:
-
-111111101 2346912
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7727-1-1.html
-
- 使用大数相加方法如下(本题目也可以使用简单的转化成整形数字然后相加方法,不必像大数相加这么繁琐):
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using std::swap;
using std::max;
char sa[20];
char sb[20]; char sc[20];
int a[10]; int b[10]; int c[10];
int StingToInt(char a[], int b[], int& sign)
{
int i;
int j;
if (a[0] == '-')
{
sign = -1;
j = 0;
}
else
{
sign = 1; b[0] = a[0] - '0'; j = 1;
}
for (i = 1; a[i]; i++)
{
if (a[i] != ',')
{
b[j] = a[i] - '0';
j++;
}
}
i = 0;
int k = j - 1;
while (i < k)
{
swap(b[i], b[k]);
i++;
k--;
}
return j;
}
void IntToString(int a[], int length, int sign, char b[])
{
int i, j;
if (sign == 1) { j = 0; }
else { b[0] = '-'; j = 1; }
for (i = length - 1; i >= 0;i--, j++)
{
b[j] = a[i] + '0';
}
b[j] = '\0';
}
int
Compare(int a[], int lengthA, int b[], int lengthB)
{
if (lengthA > lengthB) return 1;
if (lengthA < lengthB) return -1;
int i;
for (i = lengthA - 1; (i >= 0) && (a[i] == b[i]); i--);
if (i >= 0)
{
if (a[i] > b[i])
{
return 1;
}
else
{
return -1;
}
}
else
{
return 0;
}
}
// |a| >= |b|
int BigAdd(int a[], int lengthA, int signA, int b[], int lengthB, int signB, int c[], int M)
{
bool add = (signA == signB);
int length = (lengthA > lengthB) ? lengthA : lengthB;
int advance = 0;
int i;
for (i = 0;i <= length;i++)
{
int valueA = (i < lengthA) ? a[i] : 0;
int valueB = (i < lengthB) ? (add ? b[i] : (0 - b[i])) : 0;
int value = valueA + valueB + advance;
if (add)
{
if (value < M)
{
c[i] = value;
advance = 0;
}
else
{
c[i] = value - M; advance = 1;
}
}
else
{
if (value >= 0)
{
c[i] = value;
advance = 0;
}
else
{
c[i] = value + M; advance = -1;
}
}
}
i--;
while (i >= 0 && c[i] == 0)i--;
return max(i + 1, 1);
}
int main()
{
while (scanf("%s%s", sa, sb) != EOF)
{
int signA, signB, sign;
int lengthA = StingToInt(sa, a, signA);
int lengthB = StingToInt(sb, b, signB);
int length;
if (signA == signB)
{
sign = signA;
length = BigAdd(a, lengthA, signA, b, lengthB, signB, c, 10);
}
else
{
int compare = Compare(a, lengthA, b, lengthB);
switch (compare)
{
case 1:
sign = signA;
length = BigAdd(a, lengthA, signA, b, lengthB, signB, c, 10);
break;
case -1:
sign = signB;
length = BigAdd(b, lengthB, signB, a, lengthA, signA, c, 10);
break;
case 0:
sign = 1;
c[0] = 0;
length = 1;
break;
}
}
IntToString(c, length, sign, sc);
printf("%s\n", sc);
}
return 0;
}
/**************************************************************
Problem: 1003
User: phoenix198425
Language: C++
Result: Accepted
Time:0 ms
Memory:1020 kb
****************************************************************/