C++虽然支持数据的运算,但是它的计算空间仍有范围,如果遇到1000位甚至及其位数以上的运算,就大大超出了C++所能提供的数据范围,这时就需要利用字符数组来保存数据,并根据数学上的运算规则对数据进行运算处理:

##1.高精度加法

#include<bits/stdc++.h>
using namespace std;
char sa[1010],sb[1010];
int i,la,lb,lc,a[1010],b[1010],c[1010];
int main(){
    scanf("%s",&sa);
    scanf("%s",&sb);
    memset(a,0,sizeof(a));// 初始化为0; 
    memset(b,0,sizeof(b));
    la=strlen(sa);lb=strlen(sb);
    for(i=0;i<la;i++)
        a[la-i-1]=sa[i]-'0';
    for(i=0;i<lb;i++)
        b[lb-i-1]=sb[i]-'0';
    lc=max(la,lb);
    memset(c,0,sizeof(c));  
    for(i=0;i<lc;i++){
        c[i]=a[i]+b[i]+c[i];
        	if(c[i]>=10){//如果某位数字大于10,进位处理 
              c[i+1]++;
            c[i]-=10;
        }
    }
    if(c[lc]>0) lc++;//处理最高位数 
    for(i=lc-1;i>=0;i--) printf("%d",c[i]);// 逆向输出数据 
    return 0;
}

##2.高精度乘法

#include<bits/stdc++.h>
using namespace std;
char sa[101],sb[101];
int a[101],b[101],c[10100],la,lb,lc, i,j,jw=0,tmp,w;
int main(){
    scanf("%s%s",&sa,&sb);
    la=strlen(sa);lb=strlen(sb);
    lc=la+lb;
    //memset(a,0,sizeof(a));memset(b,0,sizeof(b));
    for(i=0;i<la;i++)
        a[la-i-1]=sa[i]-'0';
    for(i=0;i<lb;i++)
        b[lb-i-1]=sb[i]-'0';
    memset(c,0,sizeof(c));//进行字符数组转整形数组操作,将保存结果的数组初始化为0; 
    for(i=0;i<la;i++)//将每一次的运算递推一位 
        for(j=0;j<lb;j++){
            tmp =a[i]*b[j]; 
            w =i+j;
            jw =tmp/10;
            tmp %=10;
            c[w] += tmp; 
            c[w+1] += jw+c[w]/10;//处理进位 
            c[w] %= 10;//处理本位 
        } 
    while(c[lc]==0) lc--;
    if(lc<0) printf("0/n");
    else for(i=lc;i>=0;i--) printf("%d",c[i]);
    return 0;
} 

##3.高精度除法(保留小数后100位)

#include<cstdio>
int a[102],b[102],c[102];
int main(){
    int num1,num2,y;
    scanf("%d%d",&num1,&num2);
    a[0]=num1/num2;b[0]=num1%num2;
    printf("%d",a[0]);
    if(b[0]) putchar('.');
    for(int i=1;i<=100;i++){
        if(b[i-1]==0) break;
           a[i]=b[i-1]*10;
           c[i]=a[i]/num2;
        printf("%d",c[i]);
        b[i]=a[i]%num2;
       }
    return 0;
} 

##4.高精度模运算

#include<bits/stdc++.h>
using namespace std;
char a[1010];
int n[1010],k,i,j,num,la ,b[1010];
int main(){
    scanf("%d%s",&k,&a);
    la=strlen(a);
    memset(n,0,sizeof(n));
    for(i=0;i<la;i++){
        n[i+1]=a[i]-'0';
    }//字符转数字 
     for(i=1;i<=la;i++){
        while(k>n[i]){
            if(i==la) break; 
            n[i+1]+=n[i]*10;//进位处理 
            i++;
        }
            b[i]=n[i]%k;
        if(i==la){
            if(b[i]==0)  printf("%d",k);
            else printf("%d",b[i]);
        }
        else
        n[i+1]=b[i]*10+n[i+1];
    }
    return 0;
} 

此外,Java和Python都比较适合处理大数据,但如果遇到上百万位的数据规模就没办法了,这时需要用到一种特殊算法,待补充