View Code of Problem 3689

#include<iostream>
#include<vector>
using namespace std;
bool cmp(vector<int> A,vector<int> B) // 判断A是否大于等于B
{
    if(A.size() != B.size()) return A.size() > B.size();
    else
    {
        for(int i = A.size() - 1;i >= 0;i --)
            if(A[i] != B[i]) return A[i] > B[i];
    }
    return true;
}
vector<int> sub(vector<int> A,vector<int> B) // 减法模板
{
    vector<int> c;
    int t = 0;
    for(int i = 0;i < A.size() || i < B.size();i ++)
    {
        t = A[i] - t;
        if(i < B.size()) t -= B[i];
        c.push_back((t + 10) % 10);
        if(t < 0) t = 1; // 如果t小于0说明借位了
        else t = 0;
    }
    while(c.size() > 1 && c.back() == 0) c.pop_back(); // 将前导0删掉
    
    return c;
}
int main()
{
	int t;
	cin >> t;
	int k = 1;
	while(t --)
	{
		string a, b;
    cin >> a >> b;
    vector<int> A, B;
    for(int i = a.size() - 1;i >= 0;i --) A.push_back(a[i] - '0');
    for(int i = b.size() - 1;i >= 0;i --) B.push_back(b[i] - '0');
    
    if(cmp(A,B))
    {
        auto c = sub(A,B);
        cout << "Case #"<<k++<<":"<<endl;
        for(int i = c.size() - 1;i >= 0;i --) cout << c[i];
    }
    else
    {
        auto c = sub(B,A);
        cout << "Case #"<<k++<<":"<<endl;
        cout << "-";
        for(int i = c.size() - 1;i >= 0;i --) cout << c[i];
    }
    cout << endl;
	}
    
    return 0;
}

Double click to view unformatted code.


Back to problem 3689