高精度减法

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 const int N = 1e5+5;
 6 
 7 char a[N],b[N];
 8 
 9 struct bign{
10     int d[N];
11     int len;
12     bign(){
13         memset(d,0,sizeof(d));
14         len = 0;
15     }
16 };
17 
18 bign change(char *a){
19     bign c;
20     c.len = strlen(a);
21     for(int i=0; i<c.len; i++){
22         c.d[i] = a[c.len - i - 1] - '0';
23     }
24     return c;
25 }
26 
27 bign sub(bign a,bign b){
28     bign c;
29     for(int i=0; i<a.len; i++){
30         if(a.d[i] < b.d[i]){
31             a.d[i] += 10;
32             a.d[i+1]--;
33         }
34         c.d[c.len++] = a.d[i] - b.d[i];
35     }
36     while(c.len>1 && !c.d[c.len-1]) c.len--;
37     return c;
38 }
39 
40 void print(bign c){
41     for(int i=c.len-1; i>=0; i--){
42         printf("%d",c.d[i]);
43     }
44 }
45 
46 int main(){
47     scanf("%s%s",a,b);
48     int lena = strlen(a);
49     int lenb = strlen(b);
50     if(lena < lenb){
51         printf("-");
52         swap(a,b);
53     }else if(lena == lenb){
54         for(int i=0; i<lena; i++){
55             if(a[i] < b[i]){
56                 printf("-");
57                 swap(a,b);
58                 break;
59             }
60         }
61     }
62     bign v1 = change(a);
63     bign v2 = change(b);
64     print(sub(v1,v2));
65     return 0;
66 }
原文地址:https://www.cnblogs.com/zhangqiling/p/12459857.html