大数减法模板

计算  a - b

代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 string sol;
 6 
 7 bool get(string a, string b){
 8     if(a.size() < b.size()) return true;
 9     if(a.size() > b.size()) return false;
10     for(int i = 0; i < a.size(); i++){
11         if(a[i] < b[i]) return true;
12         else if(b[i] < a[i]) return false;
13     }
14     return false;
15 }
16 
17 void solve(string a, string b){
18     int j = a.size() - 1;
19     bool flag = false;//借位
20     for(int i = b.size() - 1; i >= 0; i--,j--){
21         int x = a[j] - '0';
22         int y = b[i] - '0';
23         if(flag){
24             x -= 1;
25             if(x < 0) x += 10;
26             else flag = false;
27         }
28         if(x < y){
29             x += 10;
30             flag = true;
31         }
32         sol += (char)(x - y + '0');
33     }
34     if(flag) a[j] -= 1;
35     while(j >= 0){
36         sol += a[j--];
37     }
38 }
39 
40 int main(void){
41     string a, b;
42     cin >> a >> b;
43     bool flag = get(a, b);
44     if(flag) solve(b, a);
45     else solve(a, b);
46     reverse(sol.begin(), sol.end());
47     if(flag) cout << "-";
48     cout << sol << endl;
49     return 0;
50 }

 

posted @ 2017-08-15 18:14  geloutingyu  阅读(542)  评论(4编辑  收藏  举报