字符串減法(大數)


#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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM