压位高精在高精度运算中加入了压位思想。详情请看代码(以高精加法为例)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define p 8 //要压的数
#define carry 100000000 //用于进位
using namespace std;
const int N=100010;
char s1[N],s2[N];
int a[N],b[N],ans[N];
int change(char s[],int n[]){
char temp[N];//记录每p位的数
int len=strlen(s),idx=0;
while (len/p) {
strncpy(temp,s+len-p,p); //从后面截出p位数
n[++idx]=atoi(temp);
len-=p;
}
if (len){
memset(temp,0,sizeof (temp));
strncpy(temp,s,len);
n[++idx]=atoi(temp);
}
return idx;
}
int add(int a[],int b[],int c[],int l1,int l2){
int x=0,l3=max(l1,l2);
for (int i=1;i<=l3;i++){
c[i]=a[i]+b[i]+x;
x=c[i]/carry;
c[i]%=carry;
}
while (x>0){
c[++l3]=x%10;
x/=10;
}
return l3;
}
void print(int a[],int len){
printf("%d",a[len]);
for (int i=len-1;i>=1;i--){
printf("%0*d",p,a[i]);//输出p位,不足补零
}
printf("\n");
}
int main(){
scanf("%s%s",s1,s2);
int la=change(s1,a);
int lb=change(s2,b);
int len=add(a,b,ans,la,lb);
print(ans,len);
}