/****************************************************************************************
Problem Description
I have a very simple problem for you. Given two integers A and B, your job is to
calculate the Sum of A + B.
Input
The first line of the input contains an integer T(1<=T<=20) which means the number
of test cases. Then T lines follow, each line consists of two positive integers,
A and B. Notice that the integers are very large, that means you should not process
them by using 32-bit integer. You may assume the length of each integer will not
exceed 1000.
Output
For each test case, you should output two lines. The first line is "Case #:", #
means the number of the test case. The second line is the an equation "A + B = Sum",
Sum means the result of A + B. Note there are some spaces int the equation. Output a
blank line between two test cases.
Sample Input
2
1 2
112233445566778899 998877665544332211
Sample Output
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
****************************************************************************************/
#include <stdio.h>
#include <string.h>
int main (void)
{
char a[1000], b[1000], c[1001]; // 最高位和可能会进位, 所以要多一字节存进位.
int n, i, j, k;
int alength, blength, clength;
char carry = 0; // 进位标识, 只可能是1/0
while(scanf("%d", &n) != EOF)
{
for (i = 0; i < n; i++) // 处理 n 组数
{
memset(a, 0, sizeof(a)); // 将所有分配的内存置 0.
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
scanf("%s %s", a, b); // 输入第 1 和 2 两数.
printf("Case %d:\n", i + 1);
alength = strlen(a); // 获取数字长度
blength = strlen(b);
clength = (alength >= blength) ? alength : blength;
for (j = alength - 1, k = blength - 1; j >= 0 && k >= 0; j--, k--)
{
if (a[j] + b[k] - '0' + carry > '9') {
c[clength--] = (a[j] - '0' + b[k] - '0' + carry) % 10 + '0';
carry = 1;
} else {
c[clength--] = (a[j] - '0' + b[k] - '0' + carry) % 10 + '0';
carry = 0;
}
}
while (j >= 0) { // 当 a[] 比 b[] 长时
if (a[j] + carry > '9') {
c[clength--] = (a[j--] + carry - '0') % 10 + '0';
carry = 1;
} else {
c[clength--] = a[j--] + carry;
carry = 0;
}
}
while (k >= 0) { // 当 b[] 比 a[] 长时
if (b[k] + carry > '9') {
c[clength--] = (b[k--] + carry - '0') % 10 + '0';
carry = 1;
} else {
c[clength--] = b[k--] + carry;
carry = 0;
}
}
c[0] = carry + '0';
k = 0; // 就不多定义变量了, 复用吧.
while (c[k] == '0') { // 去除结果中的前导 0.
k++;
}
if (c[k] != '\0') // 不全是 0 的情况
{
printf("%s + %s = %s\n", a, b, c + k);
} else { // 全部是 '0' 的情况.
printf("%s + %s = %s\n", a, b, c + k - 1);
}
if (i != n - 1) { // 要求是两个结果之间有空行, 最后一个输出结果没空格, 坑爹
printf("\n");
}
carry = 0; // 处理下组数之前将进位位清零
}
}
return 0;
}
Problem-1002 : A + B Problem II
最新推荐文章于 2020-05-19 10:31:30 发布