在计算机中,计算大数的时候,一般都不会超过8个字节的数,如果超过了该怎么计算呢,这个时候我们需要将大数转换成数组,然后进行运算。
/*
** Name: Add two big number
** Author: WJY
** Date: 2014-07-26
*/
#include <iostream>
using namespace std;
#define ARRAY_SIZE 128
// Get number from stdin
void GetNumber(char buff[], int& size);
// Reverse the elements of the array buffer
void ReverseArray(char buff[], int size);
// Adding two big number
void AddBigNumber(char buff1[], int size1, char buff2[], int size2, char result[], int& size3);
// Show the adding result
void DisplayResult(char result[], int size);
int main(int argc, char *argv[])
{
char aData[128], bData[128], sum[128];
int size1 = 0, size2 = 0, resultsize = 0;
cout << "Add two big number" << endl;
cout << "Enter the first big number, ending with an enter: " << endl;
GetNumber(aData, size1);
cout << "Enter the second big number, ending with an enter: " << endl;
GetNumber(bData, size2);
ReverseArray(aData, size1);
ReverseArray(bData, size2);
AddBigNumber(aData, size1, bData, size2, sum, resultsize);
DisplayResult(sum, resultsize);
system("pause");
return 0;
}
void GetNumber(char buff[], int& size)
{
char next;
cin.get(next);
while (next != '\n' && size < ARRAY_SIZE)
{
buff[size++] = next;
cin.get(next);
}
}
void ReverseArray(char buff[], int size)
{
char temp;
int i, j;
i = 0;
j = size - 1;
while (i <= j)
{
temp = buff[i];
buff[i] = buff[j];
buff[j] = temp;
i++;
j--;
}
}
void AddBigNumber(char buff1[], int size1, char buff2[], int size2, char result[], int& size3)
{
int i = 0, j = 0;
int res = 0;
int carry = 0;
while (i < size1 && j < size2)
{
res = (buff1[i]^0x30) + (buff2[j]^0x30) + carry;
result[size3++] = (res % 10)^0x30;
carry = res / 10;
i++;
j++;
}
// when the first big number greater than the second number
while (i < size1)
{
int ret = (buff1[i]^0x30) + carry;
result[size3++] = (ret % 10)^0x30;
carry = ret / 10;
i++;
}
//when the second big number greater than the first number
while (j < size2)
{
int ret = (buff2[j]^0x30) + carry;
result[size3++] = (ret % 10)^0x30;
carry = ret / 10;
j++;
}
if (i == size1 && j == size2 && carry != 0)
result[size3++] = carry^0x30;
result[size3] = '\0';
}
void DisplayResult(char result[], int size)
{
ReverseArray(result, size);
cout << "The adding result is : " << result << endl;
}