请先看高精度加法,再理解本文会更好(本文是在高精度加法基础之上写的)

第一步:设两个char数组,求出两者长度的最大值。

第二步:设flag(进行符号的判定)为正。

第三步:设两个int数组,进行倒序转化。(正和负的倒序转化是不一样的,请看代码)

第四步:两者相减,如果不够就借位。

第五步:进行输出的判断。

第六步:先判断符号的正负,再进行减零操作(比如1234-1234,如果没有这一步的话,会输出四个零),后进行倒序输出。(具体看代码即可)

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
int main ()
{
    char a[100000];                 //第一步
    char b[100000];

    cin >> a >> b;
    int len1=strlen(a);
    int len2=strlen(b);
    int len=max(len1,len2);

    int aa[100000];
    int bb[100000];
                                    //第二步
    int flag = 1;                   //1为正,0为负;

    if( len1<len2 || (len1==len2 && strcmp(a,b)<0) )  // 第三步(len1==len2,切记是两个等号,不然就慢慢找错吧)
    {
        flag=0;
        for (int i=0;i<len2;i++)  aa[i]=b[len2-1-i]-'0';
        for (int i=0;i<len1;i++)  bb[i]=a[len1-1-i]-'0';
    }
    else
    {
        for (int i=0;i<len1;i++)  aa[i]=a[len1-1-i]-'0';
        for (int i=0;i<len2;i++)  bb[i]=b[len2-1-i]-'0';
    }
    for (int i=0;i<len;i++)      //第四步
    {
        aa[i]=aa[i]-bb[i];
        if(aa[i]<0)
        {
            aa[i]=aa[i]+10;
            aa[i+1]--;
        }
    }

    while(a[len-1]==0 && len>1)    //第五步(如果最后减为零,可不能连最后一个零也不输出,所以len>1是很关键的。
    {
        len--;
    }

    if(flag==0)  cout << "-" ;   //第六步

    while (aa[len-1]==0 && len>1) 
    {
        len--;
    }

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

    cout << endl;

    return 0;
}