本文整理自https://wenku.baidu.com/view/3600932bbc64783e0912a21614791711cc7979f5.html
1.大数:所有数据类型都无法定义的数。
2.大数的存放:(1)数组:1个1个存或n个n个存;(2)字符数组:一个数字作为一个字符。
3.大数加法:
input:
2
1 2
112233445566778899 998877665544332211
output:
Case 1:
1+2=3
Case 2:
112233445566778899+998877665544332211=1111111111111111110

#include<stdio.h> #include<string.h> 
int main(){
    char a[5001],b[5001];
    int aa[5001],bb[5001],k,n=0;
    scanf("%d",&k);
    for(int c=1;c<=k;c++){
        scanf("%s%s",a,b);
        int alen=strlen(a);
        int blen=strlen(b);
        memset(aa,0,sizeof(aa));//清除aa里的数值,让其为0
        memset(aa,0,sizeof(bb));
        int maxlen=blen;
        if(alen>blen) maxlen=alen;
        for(int i=alen-1;i>=0;i--)
            aa[alen-i]=a[i]-'0';
        for(int i=blen-1;i>=0;i--)
            bb[blen-i]=b[i]-'0';
        for(int i=1;i<=maxlen;i++){
            aa[i]+=bb[i];
            if(aa[i]>9){
                if(i==maxlen) maxlen++;
                aa[i+1]++;
                aa[i]-=10;
            }
        }
        printf("Case %d:\n",++n);
        printf("%s+%s=",a,b);
        for(int i=maxlen;i>=1;i--)
            printf("%d",aa[i]);
        if(k==c) printf("\n");
        else printf("\n\n")
    }
    return 0;
}

4.大数减法:与加法类似
5.大数乘法:
input:
1 2
112233445566778899 998877665544332211
output:
Case 1:
12=3
Case 2:
112233445566778899
998877665544332211=112107482103740987777903741240815689

#include<stdio.h> #include<string.h> 
int main(){
    int  m,n,i,j,k,a[1000],b[1000],c[1000];
    char a1[1000],b1[1000];        
    while(scanf("s%s%",a1,b1)!=EOF){
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));

        m=strlen(a1);
        n=strlen(b1);

        for(j=0,i=m-1;i>=0;i--,j++)
            a[j]=a1[i]-'0';
        for(j=0,i=n-1;i>=0;i--,j++)
            b[j]=b1[i]-'0';
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                c[i+j]+=a[j]*b[j];
        for(i=0;i<n+m-2;i++)
            if(c[i]>=10){
                c[i+1]+=c[i]/10;
                c[i]=c[i]%10;
            }
        if(c[m+n-2]==0)
            printf("0");
        else{
            for(i=m+n-2;i>=0;i--)
                printf("%d",c[i])
        }
         printf("\n");   
    }
    return 0;
}

6.大数阶乘:
input:1 2 3
output: 1 2 6

#include<stdio.h>
int main()
{
    int a[100000];
    int i,j,k,n,m,sum,b;
    while(scanf("%d",&m)!=EOF){
        a[0]=1;k=1;
        for(i=2;i<=m;i++){
            for(n=0,j=1;j<=k;j++){
                sum=a[j-1]*i+n;
                a[j-1]=sum%10;
                n=sum/10;
            }
            while(n){
                a[++k-1]=n%10;
                n=n/10;
            }
        }
        for(b=k;b>=1;--b)
            printf("%d",a[b-1]);
        printf("\n");
    }
    return 0;
}