高精度减法

 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。

原文地址:https://www.cnblogs.com/peppa/p/8495315.html