就是大数加法,用字符串模拟加小学算术里的竖式模拟就OK了,
主要是因为许多地方需要反转要注意好对应关系。
#include<iostream>
#include<Cstring>
using namespace std;
char result[1500];
char A[1001];
char B[1001];
int main()
{
int i, j, sum, takeOver, k, temp1, temp2, size, p = 1;
cin >> size;
while (size--)
{
memset(result, '0', sizeof(result));
memset(result, '0', sizeof(A));
memset(result, '0', sizeof(B));
cin >> A >> B;
i = 0, j = 0;
while(A[i] != '\0')
++i;
while(B[j] != '\0')
++j;
i--, j--, k = 0, takeOver = 0;
while (i >= 0 || j >= 0)
{
if(i >= 0)
{
temp1 = A[i--] - '0';
}
else
temp1 = 0;
if(j >= 0)
temp2 = B[j--] - '0';
else
temp2 = 0;
sum = temp1 + temp2 + takeOver;
if(sum < 10)
{
result[k++] = sum + '0';
takeOver = 0;
}
else
{
result[k++] = sum - 10 + '0';
takeOver = 1;
}
}
if(takeOver == 1)
result[k++] = '1';
printf("Case %d:\n", p++);
printf("%s + %s = ", A, B);
for(i = k - 1; i >= 0; --i)
printf("%c", result[i]);
printf("\n");
if(size != 0)
printf("\n");
}
return 0;
}