大数运算就是很大的数字在进行运算,这个很大的数是int,long int和long long int都无法表示的(超出范围)。所以我们可以把这个大数存放在一个字符数组中,一个一个元素进行操作。大数加法可以定义两个字符数组num1,num2存放大数,之后将数组翻转,使num1[0]和num2[0]存放两个大数的最低位,从最低位开始一位一位相加,将结果保存到num1中,打印出num1就是大数相加后的结果。具体代码下面附上:
#include <iostream>
#include <string>
#define M 100
using namespace std;
void Add(char* s1,char* s2)
{
char num1[M] = "0", num2[M] = "0";
int i, j;
int len1 = strlen(s1);
int len2 = strlen(s2);
int len = (len1>len2)?len1:len2; //找出两个大数位数较大的一个
for(i=len1-1,j=0;i>=0;i--) //num1[0]保存的是最低位
{
num1[j] = s1[i];
j++;
}
for(i=len2-1,j=0;i>=0;i--)
{
num2[j] = s2[i];
j++;
}
for(i=0;i<len;i++) //将num2中的数加到num1中
{
num1[i] += num2[i] - '0';
if(num1[i]>'9') //进位操作
{
num1[i]-=10;
if( i<len-1 )
num1[i+1]++;
else
num1[i+1] = '1';
}
}
if( num1[len] == '1' ) //从最高位开始输出
cout<<num1[len];
for( i=len-1; i>=0; i-- )
{
cout<<num1[i];
}
cout<<endl;
}
int main()
{
char num1[M], num2[M];
cout<<"来两个大数"<<endl;
cin>>num1>>num2;
Add(num1, num2);
return 0;
}