1.思想:
上一版本是对每一位单独进行进位处理。这里一次性计算出加和结果之后再统一进位处理。
如图:
2.实现:
#include<iostream>
using namespace std;
#define countof(arr) (sizeof(arr) / sizeof(arr[0]))
int a_plus[10000]; //定义为全局变量,默认初始化为全零
int b_plus[10000]; // 10000 是预设的足够大的数字,确保输入数据位数不超过 10000
int result[10001]; // 保存结果
void plus_func(const string& a,const string& b)
{
int result_len = a.length() >= b.length() ? a.length() : b.length();
for (int i = a.length() - 1; i >= 0; i--) // 获取数字
a_plus[a.length() - 1 - i] = a[i] - '0'; // a_plus数组中 a_plus[0]保存个位 ;a_plus[a.length() - 1]保存最高位
for (int i = b.length() - 1; i >= 0; i--)
b_plus[b.length() - 1 - i] = b[i] - '0';
for (int i = 0; i < result_len; i++)
result[i] = a_plus[i] + b_plus[i];
for (int i = 0; i < result_len; i++) // 处理加和进位
{
if (result[i] > 9)
{
result[i + 1] += result[i] / 10;
result[i] = result[i] % 10;
}
}
// 输出 遇到第一个不为零的最高位后依次输出,若全为零则输出零
int index_none_0 = result_len + 1;
while (result[index_none_0] == 0)
{
index_none_0--;
}
if (index_none_0 < 0)
cout << 0;
else
{
for (int i = index_none_0; i >= 0; i--)
{
cout << result[i];
}
}
}
int main()
{
string a, b;
cin >> a >> b;
plus_func(a, b);
return 0;
}
3.输出:
测试结果同之前博客一致。