高精度 + - * orz 除法不会 (搁着 准备补)
高精度取余
例如123对12取余,实际上就等于((1%1210+2)%1210+3)%12=3

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
const int maxn = 10000+5;

char s1[maxn],s2[maxn];
int a[maxn],b[maxn],c[maxn];

void add() {
    scanf("%s %s",s1,s2);
    int len1=strlen(s1),len2=strlen(s2);
    for(int i=0; i<len1; i++) a[len1-i]=s1[i]-'0';
    for(int i=0; i<len2; i++) b[len2-i]=s2[i]-'0';
    int l=1,g=0;//g是处理进位
    while(l<=len1||l<=len2) {
        c[l]=a[l]+b[l]+g;
        g=c[l]/10;//超过10要进位
        c[l]%=10;//进位后留下来的数
        l++;
    }
    c[l]=g;//最后一位可能会进位。
    while(c[l]==0&&l>=0) l--;//处理前置0
    if(l==-1) printf("0");//结果为0
    else for(; l>0; l--) printf("%d",c[l]);
    printf("\n");
}

void sub(){
    scanf("%s %s",s1,s2);
    int len1=strlen(s1),len2=strlen(s2);
	if((strcmp(s1,s2)==-1&&len1==len2)||len1<len2) swap(s1,s2),printf("-");
	len1=strlen(s1),len2=strlen(s2);
    for(int i=0; i<len1; i++) a[len1-i]=s1[i]-'0';
    for(int i=0; i<len2; i++) b[len2-i]=s2[i]-'0';
    int l=1,g=0;//g是处理借位
    while(l<=len1||l<=len2) {
        c[l]=a[l]-b[l]-g;
        g=0;
        while(c[l]<0){
            g++;
            c[l]+=10;
        }//低于0要借位 
        l++;
    }
    c[l]-=g;//最后一位可能会借位。
    while(c[l]==0&&l>=0) l--;//处理前置0
    if(l==-1) printf("0");//结果为0
    else for(; l>0; l--) printf("%d",c[l]);
    printf("\n");
}

void mul(){
	scanf("%s %s",s1,s2);
    int len1=strlen(s1),len2=strlen(s2);
    for(int i=0; i<len1; i++) a[len1-i]=s1[i]-'0';
    for(int i=0; i<len2; i++) b[len2-i]=s2[i]-'0';
    for(int i=1;i<=len1;i++)
		for(int j=1;j<=len2;j++)
			c[i+j-1]+=a[i]*b[j]; // +=
    int l=len1+len2+1;
    for(int i=0;i<=l;i++) while(c[i]>9) c[i+1]+=c[i]/10,c[i]%=10;
    while(c[l]==0&&l>=0) l--;//处理前置0
    if(l==-1) printf("0");//结果为0
    else for(; l>0; l--) printf("%d",c[l]);
    printf("\n");
}

int main() {
    //add();
    //sub();
    mul();
    return 0;
}