大数减法
思路也是模拟小学减法
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{ char a[1000]={0},b[1000]={0};
int sa[1000]={0},sb[1000]={0},sc[1000]={0};
while((gets(a))!=NULL&&(gets(b))!=NULL){
int lena=strlen(a),lenb=strlen(b),clen=lena-lenb;
int len=lena>lenb?lena:lenb;
int i;
for(i=0;i<lena;i++){
sa[i]=a[i]-'0';
}
for(i=0;i<lenb;i++){
sb[i]=b[i]-'0';
}
if(clen>0) {
for(i=lenb-1;i>=0;i--){
sb[i+clen]=sb[i];
}
for(i=0;i<clen;i++){
sb[i]=0;
}
}
else if(clen<0){
for(i=lena-1;i>=0;i--){
sa[i-clen]=sa[i];
}
for(i=0;i<-clen;i++){
sa[i]=0;
}
} //这里是为了让两个数能够从个位上对齐而对两者的移位处理
for(i=len-1;i>=0;i--){
sc[i]+=sa[i]-sb[i]; //仍然很需要注意!!!!!这里是+上两者之差而非把差赋值给他
if(sc[i]<0&&i>0) {sc[i-1]--;sc[i]+=10;}
}
i=0;
while(sc[i]==0){
i++;
}
for(;i<len;i++){
printf("%d",sc[i]);
}
printf("
");
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(sa,0,sizeof(sa));
memset(sb,0,sizeof(sb));
memset(sc,0,sizeof(sc));
} //注意每次需要清0防止之前的输入存留影响后续结果
return 0;
}