计算两个整数A和B的和。
输入
输入有若干行,每行为由空格分隔的一对整数A和B,如: 5 12
输出
输出数据A和B的和。
示例输入
25 33
示例输出
58
提示
A和B可能很大,最大不超过1000位十进制数。
[程序代码]
#include<stdio.h>
#include<string.h>
#define MAXSIZE 1003
void ReverseOutput(char *Result);
void InitResult(char *Result, short maxLength);
int main()
{
/* 计算 A + B */
char s1[MAXSIZE];/* 被加数A */
char s2[MAXSIZE];/* 加数B */
char Result[MAXSIZE] = {0};/* 存放结果 */
short s1_length, s2_length;
short A_start, A_end;
short B_start, B_end;
while(scanf("%s%s", s1, s2) != EOF)
{
InitResult(Result, MAXSIZE);
if(s1[0] >= '0' && s1[0] <= '9')
{
/* 被加数A是正数 */
if(s2[0] >= '0' && s2[0] <= '9')
{
/* 加数B是正数 */
A_start = 0;
B_start = 0;
s1_length = strlen(s1);
s2_length = strlen(s2);
A_end = A_start + s1_length - 1;
B_end = B_start + s2_length - 1;
/* */
short i, j, k = 0;
if(A_end >= B_end)
{
for(i = A_end, j = B_end; i >= A_start; i --, j --)
{
if(j >= B_start)
{
if(Result[k] +(s1[i] - '0') + (s2[j] - '0') < 10)
{
/* 不会产生进位 */
Result[k] = Result[k] + (s1[i] - '0') + (s2[j] - '0') + '0';
k ++;
}
else
{
/* 产生进位 */
Result[k] = Result[k] + (s1[i] - '0') + (s2[j] - '0') + '0';
Result[k] -= 10;
k ++;
Result[k] = 1;
}
}
else
{
if(Result[k] + s1[i] + '0' - 2 * '0' < 10)
{
/* 不会产生进位 */
Result[k] = Result[k] + (s1[i] - '0') + ('0' - '0') + '0';
k ++;
}
else
{
/* 产生进位 */
Result[k] = Result[k] + (s1[i] - '0') + ('0' - '0') + '0';
Result[k] -= 10;
k ++;
Result[k] = 1;
}
}
}
/* 如果最高位有进位, 须将其转换为ASCII形式 */
short p = strlen(Result);
if(Result[p - 1] > 0 && Result[p - 1] < 10)
{
Result[p - 1] += '0';
}
ReverseOutput(Result);
}
else
{
/* 加数长度超过被加数, 将上面情况的加数和被加数位置互换即可 */
for(i = A_end, j = B_end; j >= B_start; i --, j --)
{
if(i >= A_start)
{
if(Result[k] + s1[i] + s2[j] - 2 * '0' < 10)
{
/* 不会产生进位 */
Result[k] = Result[k] + (s1[i] - '0') + (s2[j] - '0') + '0';
k ++;
}
else
{
/* 产生进位 */
Result[k] = Result[k] + (s1[i] - '0') + (s2[j] - '0') + '0';
Result[k] -= 10;
k ++;
Result[k] = 1;
}
}
else
{
if(Result[k] + s2[j] + '0' - 2 * '0' < 10)
{
/* 不会产生进位 */
Result[k] = Result[k] + (s2[j] - '0') + ('0' - '0') + '0';
k ++;
}
else
{
/* 产生进位 */
Result[k] = Result[k] + (s2[j] - '0') + ('0' - '0') + '0';
Result[k] -= 10;
k ++;
Result[k] = 1;
}