1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 using namespace std; 7 int main() 8 { 9 //高精度减法,被减数必须比减数大 10 //同时需要处理借位 11 int a[100000],b[100000],c[100000],lena,lenb,lenc,i; 12 char n[100000],n1[100000],n2[100000]; 13 memset(a,0,sizeof(a)); 14 memset(b,0,sizeof(b)); 15 memset(c,0,sizeof(c)); 16 printf("Input minuend:"); gets(n1);//输入被减数 17 printf("Input subtrahend:"); gets(n2);//输入减数 18 if(strlen(n1) < strlen(n2) ||strlen(n1) == strlen(n2) && strcmp(n1,n2) < 0)//当被减数小于减数 19 { 20 strcpy(n,n1); 21 strcpy(n1,n2); 22 strcpy(n2,n); 23 printf("-");//交换减数与被减数,然后填上负号 24 } 25 lena = strlen(n1); 26 lenb = strlen(n2); 27 for(i = 0;i <= lena - 1;i++) a[lena - i] = int(n1[i] - '0'); 28 for(i = 0;i <= lenb - 1;i++) b[lenb - i] = int(n2[i] - '0'); 29 i = 1; 30 while(i <= lena||i <= lenb) 31 { 32 if(a[i] < b[i]) 33 { 34 a[i] += 10; 35 a[i + 1]--;//借位 36 } 37 c[i] = a[i] - b[i];//对应位相减 38 i++; 39 } 40 lenc = i; 41 while((c[lenc] == 0) && (lenc > 1))lenc--;//最高位的0不输出 42 for(i = lenc;i >= 1;i--) printf("%d",c[i]); 43 return 0; 44 }
end。