#include <iostream>
#include <string>
using namespace std;
void Add(string a, string b, char sum[], int& count)
{//大数加法
int len1 = a.length();//数a的长度
int len2 = b.length();//数b的长度
int i = len1 - 1, j = len2 - 1, temp = 0, carryIn = 0;//初始进位为
count = 0;
//从最后一位开始做加法
while (i >= 0 && j >= 0)
{
temp = a[i] - '0' + b[j] - '0' + carryIn;//计算当前位
sum[count++] = temp % 10 + '0';
carryIn = temp / 10;//计算进位
--i;
--j;
}
//第一个数还有剩余
if (i >= 0)
{
//利用进位继续做
while (i >= 0)
{
temp = a[i] - '0' + carryIn;
sum[count++] = temp % 10 + '0';
carryIn = temp / 10;
--i;
}
}
//第二个数还有剩余
if (j >= 0)
{
while (j >= 0)
{
temp = b[j] - '0' + carryIn;
sum[count++] = temp % 10 + '0';
carryIn = temp / 10;
--j;
}
}
//最高位特殊考虑下
if (carryIn>0)
{
sum[count++] = '1';
}
}
void reversePrint(char arr[], int len)
{//逆向输出
for (int i = len - 1; i >= 0; --i)
{
cout << arr[i];
}
cout << endl;
}
int main()
{
string a, b;
char sum[2000];//和
memset(sum, '0', 2000);
int nCount = 0;
int caseNum;
cin >> caseNum;
for (int curCase = 1; curCase <= caseNum;++curCase)
{
cin >> a >> b;
Add(a, b, sum, nCount);
cout << "Case " << curCase << ":" << endl;
cout << a << " + " << b << " = ";
reversePrint(sum, nCount);
cout << endl;
}
return 0;
}
杭电OJ 1002 A+B Problem II
最新推荐文章于 2022-09-27 21:32:40 发布