先在纸上书写几个代表性的减法式子并进行分析,提炼出处理模块
90
- 215
---------
- 125
3100
- 215
---------
2885
190
- 190
---------
0
首先要比较两个高精度数的大小
分为三种情况
- a==b相等则输出0
- a>b,计算a-b并输出
- a<b,输出 – 号,计算b-a并输出
计算的时候存在着向高位借位的情况
处理差的位数
927
- 896
-----------
1 7-6=1
3 12-9=3,借位12
0 (9-1)-8=0
-----------
31
主模块可编写如下:
int main(){
int a[N],b[N],f;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
Read(a);
Read(b);
f=Comp(a,b);
if(f==0){
cout<<0;
return 0;
}
if(f>0) {
Minus(a,b);
Out(a);
}
else {
cout<<'-';
Minus(b,a);
Out(b);
}
return 0;
}
比较模块
int Comp(int a[],int b[]){//比较a和b的大小关系,若a>b则为1,a<b则为-1,a=b则为0
if(a[0]>b[0])return 1; //a的位数大于b,则a比b大
if(a[0]<b[0])return -1; //a的位数小于b,则a比b小
for(int i=a[0];i>0;i--) { //否则a和b的位数相同,则从高位到低位比较
if(a[i]>b[i])return 1;
if(a[i]<b[i])return -1;
}
return 0;//各位都相等则两数相等。
}
减法模块
void Minus(int a[],int b[]){//计算a=a-b
for(int i=1;i<=a[0];i++){
if(a[i]<b[i]){ a[i+1]--;a[i]+=10;} //若不够减则向上借一位
a[i]=a[i]-b[i];
}
while(a[0]>0&&a[a[0]]==0) a[0]--; //修正a的位数
return;
}