高精加
原理:电脑模拟人工加法
这里采用倒着进行运算,因为这样的话方便进位
vector实现
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B)
{
vector<int> C;
int t=0;//进位
for(int i=0;i < A.size() || i < B.size();i++)
{
if(i<A.size()) t+=A[i];//如果i小于A的总长度的话,那么就将sum加上A的这一位的数
if(i<B.size()) t+=B[i];//如果i小于B的总长度的话,那么就将sum加上B的这一位的数
C.push_back(t%10);//保证sum不大于10
t/=10;//把各位去掉
}
if(t) C.push_back(1);//如果最后还有数的话,那么它就一定是1
return C ;
}
int main()
{gao
string a,b;
vector<int> A,B;
cin>>a>>b;
for( int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//倒着存有助于进位
for( int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');//倒着存有助于进位
auto C=add(A,B);//auto就是自动匹配类型变量
for(int i=C.size()-1;i>=0;i--)
{
printf("%d",C[i]);
}
return 0;
}
普通实现
#include <bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005];
string al,bl;
int main()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int la,lb,lc,x=0; //x=进位
cin>>al;
cin>>bl; //读入al,bl
la=al.length();
lb=bl.length(); //计算长度
if(al=="0\0"&&bl=="0\0")
{
cout<<"0"; //特判
return 0;
}
for(int i=0;i<=la-1;i++)
{
a[la-i]=al[i]-48; //转为数字
}
for(int i=0;i<=lb-1;i++)
{
b[lb-i]=bl[i]-48; //转为数字
}
lc=1;
while(lc<=la||lc<=lb)
{
c[lc]=a[lc]+b[lc]+x;
x=c[lc]/10; //进位
c[lc]%=10; //求相加之后的个位
lc++; //计算下一个数
}
c[lc]=x;
while(c[lc]==0)
{
lc--; //去掉前导0
}
for(int i=lc;i>=1;i--)
{
cout<<c[i];
}
return 0;
}
同问?
???