大数加算アルゴリズム

12802 ワード

テーマ:二つの大数加算を実現する

/********************************************************************************************



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;
}