一.高精度加法

①输入两个加数(字符串as,bs)

cin>>as>>bs;

②倒序存进数组a[10005]和b[10005]里面(目的是为了让两个加数的末位对齐)

int ka=as.size(),kb=bs.size(),kc=max(ka,kb);
	for(int i=0;i<ka;i++){
        a[ka-i-1]=as[i]-'0';
    }
    for(int i=0;i<kb;i++){
        b[kb-i-1]=bs[i]-'0';
    }

③将数组a和数组b一位一位相加

for(int i=0;i<kc;i++){
        c[i]=a[i]+b[i];
    }

④处理进位的问题

for(int i=0;i<kc;i++){
        if(c[i]>9){
            c[i+1]=c[i+1]+c[i]/10;//因为是倒序存储,所以是i+1; 
            c[i]=c[i]%10;
        }
    }

⑤需要特判最高位(只需要判断一位即可)

if(c[kc]!=0){
        kc++;
    }

⑥输出

for(int i=kc-1;i>=0;i--){
        cout<<c[i];
    }

*完整代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string as,bs;
    int a[10005]={0},b[10005]={0},c[10005]={0};
    cin>>as>>bs;
    int ka=as.size(),kb=bs.size(),kc=max(ka,kb);
    for(int i=0;i<ka;i++){
        a[ka-i-1]=as[i]-'0';
    }
    for(int i=0;i<kb;i++){
        b[kb-i-1]=bs[i]-'0';
    }
    for(int i=0;i<kc;i++){
        c[i]=a[i]+b[i];
    }
    for(int i=0;i<kc;i++){
        if(c[i]>9){
            c[i+1]=c[i+1]+c[i]/10;
            c[i]=c[i]%10;
        }
    }
    if(c[kc]!=0){ 
        kc++;
    }
    for(int i=kc-1;i>=0;i--){
        cout<<c[i];
    }
    return 0;
}

二.高精度减法

①输入两个加数(字符串sa,sb)

cin>>sa>>sb;

②确保被减数(a)大于减数(b)

int ka=sa.size(),kb=sb.size(),kc;
    if(ka<kb||(ka==kb&&sa<sb)){
        flag=1;
        swap(ka,kb);
        swap(sa,sb);
    }

③倒序存进数组a[10005]和b[10005]里面(目的是为了让减数和被减数的末位对齐)

for(int i=0;i<ka;i++){
        a[ka-i-1]=sa[i]-'0';
    }
    for(int i=0;i<kb;i++){
        b[kb-i-1]=sb[i]-'0';
    }

④将数组a和数组b一位一位相减

for(int i=0;i<ka;i++){
        c[i]=a[i]-b[i];
    }

⑤处理借位的问题

for(int i=0;i<ka;i++){
        if(c[i]<0){
            c[i+1]--;
            c[i]=c[i]+10;
        }
    }

⑥删除前导0并判断结果是否为负数

kc=ka;
    while(kc>0&&c[kc]==0){
        kc--;
    } 
    if(flag==1){
        cout<<'-';
    }

⑦输出

for(int i=kc-1;i>=0;i--){
        cout<<c[i];
    }

*完整代码:

#include<bits/stdc++.h>
using namespace std;
string sa,sb;
int flag=0;
int a[10005],b[10005],c[10005];
int main()
{
    cin>>sa>>sb;
    int ka=sa.size(),kb=sb.size(),kc;
    if(ka<kb||(ka==kb&&sa<sb))
    {
        flag=1;
        swap(ka,kb);
        swap(sa,sb);
    }
    for(int i=0;i<ka;i++)
    {
        a[i]=sa[ka-i-1]-'0';
    }
    for(int i=0;i<kb;i++)
    {
        b[i]=sb[kb-i-1]-'0';
    }
    for(int i=0;i<ka;i++)
    {
        c[i]=a[i]-b[i];
    }
    for(int i=0;i<ka;i++)
    {
        if(c[i]<0)
        {
            c[i+1]--;
            c[i]=c[i]+10;
        }
    }
    kc=ka;
    while(kc>0&&c[kc]==0)
    {
        kc--;
    }
    if(flag==1)
    {
        cout<<'-';
    }
    for(int i=kc;i>=0;i--)
    {
        cout<<c[i];
    }
    return 0;
}