大数加算アルゴリズム
テーマ:二つの大数加算を実現する
/********************************************************************************************
1、 :
2、 :
(1) , , a,b;
(2) a aLen, b bLen;
(3) aLen bLen , maxLen 。
(4) aArr, maxLen, a , 。
image.png
(5) bArr, maxLen, b , 0, 。
image.png
(6) sumArr, maxLen, 。
(7) jin, 0, 0。
(9) , sumArr[maxLen-1] (a +b + ) 10 , jin=(a +b + ) 10 。 :
image.png
(10) , jin 1, 1 cout <
#include
#include
using namespace std;
int main()
{
char* a = "12311111111111111111111456";
char* b = "911111111111111111111111111111111178";
//1、
int aLen = strlen(a);
int bLen = strlen(b);
cout << "aLen=" << aLen << " bLen=" << bLen << endl;
int maxLen = 0;
//2、
if (aLen>bLen)
{
maxLen = aLen;
}
else
{
maxLen = bLen;
}
cout << "maxLen=" << maxLen << endl;
//3、 aArr, maxLen , int aArr[]
int* aArr = new int[maxLen]; // aArr, maxLen , int aArr[]
int* bArr = new int[maxLen];
int* sumArr = new int[maxLen];
//4、 , char ,
cout << " aArr[]=";
for (int i = maxLen - 1; i >= 0; i--)
{
if (aLen <= 0) //
{
aLen = 0;
aArr[i] = 0;
}
else
{
aArr[i] = a[--aLen] - '0';// ( ), char , 。
}
cout << aArr[i];
}
cout << endl;
// 2
cout << " bArr[]=";
for (int j = maxLen - 1; j >= 0; j--)
{
if (bLen <= 0)
{
bArr[j] = 0;
}
else
{
bArr[j] = b[--bLen] - '0';
}
cout << bArr[j];
}
cout << endl;
//5、 , , ,
int jin = 0;
cout << "sumArr[k]=";
for (int k = maxLen - 1; k >= 0; k--)
{
sumArr[k] = (aArr[k] + bArr[k] + jin) % 10;//
jin = (aArr[k] + bArr[k] + jin) / 10;// , ,
cout<< sumArr[k];
}
cout << endl;
if (jin != 0)
{
cout << "1";
}
cout << "sumArr[t]=";
for (int t = 0; t<maxLen; t++)
{
cout << sumArr[t];
}
return 0;
}