字符串减法(大数)

#include<iostream>
#include<string>
#include<string.h>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<vector>
#define ll long long
using namespace std;
string add(string s1, string s2) {
    int i = s1.length() - 1;
    int j = s2.length() - 1;
    int ans = 0;
    string ss = "";
    while (i >= 0 || j >= 0||ans!=0) {
        if (i >= 0)
            ans = ans + s1[i--] - '0';
        if (j >= 0)
            ans = ans + s2[j--] - '0';
        ss = ss + to_string(ans % 10);
        ans = ans / 10;
    }
    reverse(ss.begin(), ss.end());
    return ss;
}
string sub(string s1, string s2) {
    int i = s1.length()-1;
    int j = s2.length()-1;
    int flag = 0;
    string ans = "";
    while (i>=0&&j >=0) {
        s1[i] = s1[i] - flag;
        if (s1[i] >= s2[j]) {
            flag = 0;
            int temp = s1[i] - s2[j];
            ans = ans + to_string(temp);
        }
        else {
            int temp = s1[i] - s2[j] + 10;
            ans = ans + to_string(temp);
            flag = 1;
        }
        i--, j--;
    }
    while (i>=0) {//处理剩余部分
        if (flag == 0)
            ans = ans + s1[i];
        else {
            int temp = s1[i] - '1';
            ans = ans + to_string(temp);
        }
        i--;
    }
    //翻转并去除前导0
    int len = ans.length();
    string ss = "";
    for (int i = len-1; i>=0; i--) {
        if (ans[i] == '0')
            continue;
        ss = ss + ans[i];
    }
    return ss;
}
int main() {
    string s1, s2;
    cin >> s1 >> s2;
    cout << sub(s1, s2) << endl;
    system("pause");
    return 0;
}

 

posted @ 2020-08-29 19:09  知道了呀~  阅读(735)  评论(0编辑  收藏  举报