大数减法模板

计算  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 }

 

转载于:https://www.cnblogs.com/geloutingyu/p/7366589.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值