求两个大数之和
发布时间:2020-12-14 03:28:15 所属栏目:大数据 来源:网络整理
导读:在计算机中,计算大数的时候,一般都不会超过8个字节的数,如果超过了该怎么计算呢,这个时候我们需要将大数转换成数组,然后进行运算。 /*** Name: Add two big number** Author: WJY** Date: 2014-07-26*/#include iostreamusing namespace std;#define AR
|
在计算机中,计算大数的时候,一般都不会超过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& 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] = ' ';
}
void DisplayResult(char result[],int size)
{
ReverseArray(result,size);
cout << "The adding result is : " << result << endl;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
