示例:
88888888888888888888(20位)+11111111111111111111(20位)=99999999999999999999(20位)
思想:由于int型最大为10亿左右,当超过这个位数的时候,将会给计算带来问题,这时候就需要大数计算。
这里讲数字按位储存在数组里面进行操作~
然后对数组进行按位加,需要注意的就是进位操作。
/*
Title:大数加法
Author:Dojking
*/
#include <iostream>
#include <string>
using namespace std;
void swap(string &plus1, string &plus2) /*交换两数*/
{
string t;
t = plus1;
plus1 = plus2;
plus2 = t;
}
void BigPlus(string plus1, string plus2) /*大数加法*/
{
int i,j,num,len1,len2;
len1 = plus1.size()-1;
len2 = plus2.size()-1;
int *strplus = new int[len1+2]; /*动态开辟空间*/
for (i = 0; i <= len1+1; ++i)
strplus[i] = 0; /*初始化为0*/
for (i = len1, j = len2; i >= 0; --i,--j)/*plus1位数不小于plus2位数*/
{
if (j >= 0)
num = (plus1[i]-'0') + (plus2[j]-'0'); /*和*/
else
num = (plus1[i]-'0'); /*和*/
if (num >= 10)
{
strplus[i+1] += (num-10); /*本位*/
strplus[i] = 1; /*高位:进1*/
}
else
{
strplus[i+1] += num; /*本位*/
}
}
i = strplus[0] == 0 ? 1 : 0; /*舍去高位无用0*/
for ( ; i <= len1+1; ++i) /*打印结果*/
cout<<strplus[i];
cout<<endl;
delete[] strplus;
strplus = NULL;
}
int main()
{
string plus1,plus2;
cin>>plus1>>plus2;
if (plus1.size() < plus2.size()) /*使plus1位数不小于plus2*/
swap(plus1,plus2);
BigPlus(plus1,plus2); /*大数加法*/
return 0;
}