0
0
包思远
新手启示者
新手启示者
//高精度课程笔记:
string x,y;
int a[1005],b[1005],c[2005];
void Plus(){//加法
c[0]=max(a[0],b[0]);//c[0]存和的位数
int jw=0;//jw初值0
for(int i=1;i<=c[0];i++){
c[i]=a[i]+b[i]+jw;
jw=c[i]/10;//先处理进位
c[i]%=10;
}
if(jw!=0)c[++c[0]]=jw;//判断是否进位,进位,位数+1,这一位为1
}
void Minus(){//减法
c[0]=max(a[0],b[0]);//c[0]存差的位数
int jw=0;//jw初值0
for(int i=1;i<=c[0];i++){
if(a[i]<b[i]){//借位的情况
a[i+1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
while(c[c[0]]==0)c[0]--;//高位连续0的情况
}
void Mul(){//乘法
c[0]=a[0]+b[0];//积的位数
for(int i=1;i<=a[0];i++){
for(int j=1;j<=b[0];j++){
c[i+j-1]+=a[i]*b[j];//这里一定要+=
}
}
int jw=0;//jw初值0
for(int i=1;i<=c[0];i++){
c[i]=c[i]+jw;
jw=c[i]/10;
c[i]%=10;
}
while(c[c[0]]==0)c[0]--;//高位连续0的情况
}
0
0
包思远
新手启示者
新手启示者