高精度加法
#include <iostream>
#include <string>
using namespace std;
int num1[100],num2[100],sum[200];
int main()
{
string a,b;
int len1,len2,len;
cin >> a >> b;
len1=a.size();
len2=b.size();
int j=0,k=0;
for(int i=len1-1; i>=0; i--) //将字符串转为数字存入数组
num1[j++]=a[i]-'0';
for(int i=len2-1; i>=0; i--)
num2[k++]=b[i]-'0';
if(len1>len2) len=len1;//找出最长的
else len=len2;
for(int i=0; i<len; i++)
{
sum[i]+=num1[i]+num2[i];
if(sum[i]>=10)
{
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
}
if(sum[len]!=0) len++;
for(int i=len-1; i>=0; i--) cout << sum[i] ;
}
高精度减法
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=1e5+10;
int r[N];
int main()
{
string a,b;
cin >> a >> b;
int la=a.size()-1,lb=b.size()-1;
if(la<lb||(la==lb&&a<b))
{
cout << "-";
swap(la,lb);
swap(a,b);
}
if(a==b)
{
cout << "0";
return 0;
}
memset(r,0,sizeof r);
int u=0;
while(la>=0&&lb>=0)
{
r[u]=r[u]+(a[la]-'0')-(b[lb]-'0');
if(r[u]<0)
{
r[u+1]--;
r[u]+=10;
}
u++;
la--;
lb--;
}
while(la>=0)
{
r[u]=r[u]+(a[la]-'0');
if(r[u]<0)
{
r[u+1]--;
r[u]+=10;
}
u++;
la--;
}
while(u>=0&&r[u]==0) u--;
while(u>=0)
{
cout << r[u];
u--;
}
return 0;
}