#C语言
#include <math.h>
#include <stdio.h>
#include <string.h>
void reverse(char a[],int n)
{
    int m=n;
    char *c=(char*)malloc(sizeof(char)*400);
    int i=0;
    while (n>=0) 
    {
        c[i]=a[n];
        n--;
        i++;
    }
    for(int i=0;i<=m;i++)
    {
        a[i]=c[i];
    }
    
}
void add(char a[],char b[],int s,int v)
{
    int w=0;
    char c[800];
    int left=0;
    while(w<=s||w<=v)
    {
        if(w<=s&&w<=v)
        {
          
           int t_c=(a[w]-'0')+(b[w]-'0')+left;
           left=0;
           if(t_c>=10)
           {
            left=1;
            c[w]=t_c-10+'0';
           }
           else c[w]=t_c+'0';
        }
        else if(w>s&&w<=v)
        {
           int t_c=+(b[w]-'0')+left;
           left=0;
           if(t_c>=10)
           {
            left=1;
            c[w]=t_c-10+'0';
           }
           else c[w]=t_c+'0';
        }        
        else if(w>v&&w<=s)
        {
           int t_c=(a[w]-'0')+left;
           left=0;
           if(t_c>=10)
           {
            left=1;
            c[w]=t_c-10+'0';
           }
           else c[w]=t_c+'0';
        }
        w++;
    }
    if(left==1)c[w]='1';
    else w--;
    for(int j=w;j>=0;j--)
    {
        printf("%c",c[j]);
    }
    printf("\n");
}
void sub(char a[],char b[],int s,int v)
{
    int w=0;
    char c[800];
    char lend[400];
    char belend[400];
    if(s>v)
    {
            for (int i=0; i<=s; i++) 
        {
            lend[i]=a[i];
        }
            for (int i=0; i<=v; i++) 
        {
            belend[i]=b[i];
        }
    }
    else if(s<v)
    {
        printf("-");
        int temp=s;
        s=v;
        v=temp;
        for (int i=0; i<=s; i++) 
        {
            lend[i]=b[i];
        }
            for (int i=0; i<=v; i++) 
        {
            belend[i]=a[i];
        }
    }
    else if(s==v)
    {
        int flag=0;
        //printf("s:%d\n",s);
        //printf("lend:%d,belend:%d\n",lend[0],belend[0]);
        for(int i=s;i>=0;i--)
        {
            if(a[i]>b[i])
            {
                flag=0;
                break;
            }
            else if(a[i]<b[i])
            {
                flag=1;
                break;
            }
         }
         //printf("flag:%d\n",flag);
         if(flag==1)
         {
            printf("-");
            int temp=s;
            s=v;
            v=temp;
            for (int i=0; i<=s; i++) 
            {
                lend[i]=b[i];
            }
                for (int i=0; i<=v; i++) 
            {
                belend[i]=a[i];
            }
         }
         if(flag==0)
         {
                for (int i=0; i<=s; i++) 
            {
                lend[i]=a[i];
            }
                for (int i=0; i<=v; i++) 
            {
                belend[i]=b[i];
            }
         }
    }

    
    
    while(w<=s||w<=v)
    {
       
    
        if(w<=s&&w<=v)
        {
            //printf("w:%d\n",w);
           int t_c=(lend[w]-'0')-(belend[w]-'0');
            //printf("t_c:%d,lend:%d,belend:%d",t_c,lend[w],belend[w]);
                if(t_c<0)
                {
                    int l=w+1;
                    while(lend[l]<1)
                    {  
                        lend[l]=9;
                        l++;
                    }
                    c[w]=t_c+10+'0';
                    lend[l]=lend[l]-1;
                }   
                else c[w]=t_c+'0';
        }
            
           
              
        else if(w>v&&w<=s)
        {
           c[w]=lend[w];
        }
        w++;
    }
    w--;
    int flag=0;
    for(int j=w;j>=0;j--)
    {
        if(flag==0&&c[j]=='0')
        {
            continue;
        }
        else
        {
            printf("%c",c[j]);
            flag=1;
        }
    }
    if (flag==0) 
    { 
        printf("0");
    
    }
    printf("\n");
}
void mtp(char a[],char b[],int s,int v)
{
    int w=0;
    char c[800];
    int c2[800]={0};
    int left=0;
    int sum=0;
    for(int i=0;i<=s;i++)
    {
        for(int j=0;j<=v;j++)
        {
            c2[i+j-1+2]+=(a[i]-'0')*(b[j]-'0');
            //if(i+j+1==32)printf("c2[%d+%d+1]:%d,a[%d]:%d,b[%d]:%d\n",i,j,c2[i+j+1],i,a[i]-'0',j,b[j]-'0');
        }
        
    }
    for (int i=1; i<=s+v+2; i++) {
        
        
        c2[i]+=left;
        left=0;
        if(c2[i]>=10)
        {
            left=c2[i]/10;
            c2[i]=c2[i]%10;
        }
        // printf("i:%d,c2:%d\n",i,c2[i]);
    
    }
    if(c2[s+v+2]!=0)printf("%d",c2[s+v+2]);
    for (int i=s+v-1+2; i>=1; i--) {
        printf("%d",c2[i]);
    }
    
    
}
int main() {
    char a[400];
    char b[400];
    scanf("%s",a);
    scanf("%s",b);
    int la=strlen(a)-1;
    int lb=strlen(b)-1;
    reverse(a,la);
    reverse(b,lb);

    add(a, b, la, lb);

    sub(a, b, la, lb);

    mtp(a, b, la, lb);


}

最主要是减法要分清正负,可以先比较两个数大小,大的做被减数小的做减数